Rangkuman
Mata Kuliah Struktur data
B.
PEMBAHASAN MATERI
1.Pengertian
Struktur Data
struktur data adalah cara penyimpanan,
penyusunan dan pengaturan data di dalam media penyimpanan komputer sehingga
data tersebut dapat digunakan secara efisien.
Dalam teknik
pemrograman, struktur data berarti tata letak data yang berisi kolom-kolom
data, baik itu kolom yang tampak oleh pengguna (user) atau pun kolom yang hanya
digunakan untuk keperluan pemrograman yang tidak tampak oleh pengguna. Setiap
baris dari kumpulan kolom-kolom tersebut dinamakan catatan (record). Lebar
kolom untuk data dapat berubah dan bervariasi. Ada kolom yang lebarnya berubah
secara dinamis sesuai masukan dari pengguna, dan juga ada kolom yang lebarnya
tetap. Dengan sifatnya ini, sebuah struktur data dapat diterapkan untuk
pengolahan database (misalnya untuk keperluan data keuangan) atau untuk
pengolah kata (word processor) yang kolomnya berubah secara dinamis. Contoh
struktur data dapat dilihat pada berkas-berkas lembar-sebar (spreadsheet),
pangkal-data (database), pengolahan kata, citra yang dipampat (dikompres), juga
pemampatan berkas dengan teknik tertentu yang memanfaatkan struktur data.
Array dan Pointer
Array adalah organisasi kumpulan data homogen yang ukuran atau jumlah
elemen maksimumnya telah diketahui dari awal. Array umumnya disimpan di memori
komputersecara kontigu (berurutan). Deklarasi dari array adalah sebagai
berikut: int A[5]; artinya variabel A adalah kumpulan data sebanyak 5 bilangan
bertipe integer.
Operasi terhadap elemen di array dilakukan dengan pengaksesan langsung.Nilai
di masing-masing posisi elemen dapat diambil dan nilai dapat disimpan tanpa
melewati posisi-posisi lain. Terdapat dua tipe operasi, yaitu:
1. Operasi terhadap satu elemen/posisi dari array
2. Operasi terhadap array sebagai keseluruhan
Dua operasi paling dasar terhadap satu elemen/posisi adalah
1. Penyimpanan nilai elemen ke posisi tertentu di array
2. Pengambilan nilai elemen dari posisi tertentu di array
Keunggulan array adalah sebagai berikut:
1. Array sangat cocok untuk pengaksesan acak. Sembarang elemen di array
dapat diacu secara langsung tanpa melalui elemen-elemen lain.
2. Jika berada di suatu lokasi elemen, maka sangat mudah menelusuri ke
elemenelemen tetangga, baik elemen pendahulu atau elemen penerus.
Kelemahan array adalah sebagai berikut:
Array mempunyai fleksibilitas rendah, karena array mempunyai batasan
sebagai berikut:
1. Array harus bertipe homogen. Kita tidak dapat mempunyai array dimana
satu elemen
adalah karakter, elemen lain bilangan, dan elemen lain adalah tipe-tipe
lain
2. Kebanyakan bahasa pemrograman mengimplementasikan array statik yang
sulit
diubah ukurannya di waktu eksekusi. Bila penambahan dan pengurangan
terjadi
terus-menerus, maka representasi statis
• Tidak efisien dalam penggunaan memori
• Menyiakan banyak waktu komputasi
• Pada suatu aplikasi, representasi statis tidak dimungkinkan
Contoh Program Array :
#include<constream.h>
void main()
{
int n;
int array[10];
clrscr();
cout<<"input data array
: "<<endl;
for (n=0; n<10; n++)
{
cout<<"elemen ke
"<<n+1<<":"; cin>>array[n];
}
cout<<endl;
cout<<"tampil data
array : "<<endl;
for (n=0; n<10; n++)
{
cout<<"elemen ke
"<<n+1<<":"<<array[n]<<endl;
}
getch();
}
Hasil dari program tersebut adalah variable array menampung 5 kumpulan
variable bertipe integer dan hasilnya seperti gambar dibawah.
Pointer
Pointer adalah suatu variabel penunjuk, berisi nilai
yang menunjuk alamat suatu lokasi memori tertentu. Jadi pointer tidak
berisi nilai data, melainkan berisi suatu alamat memori atau null jika tidak
berisi data. Pointer yang tidak diinisialisasi disebut dangling pointer. Lokasi
memori tersebut bisa diwakili sebuah variabel atau dapat juga berupa nilai
alamat memori secara langsung.
Misalnya kita ingin membuat beberapa penunjuk ke blok penyimpan yang
berisi
integer. Deklarasi pada C adalah:
int *IntegerPointer ;
Tanda asterik (*) yang berada sebelum nama variable IntegerPointer
menandakan
‘pointer pada suatu int’. Jadi deklarasi diatas berarti ‘definisikan
sebuah tipe yang terdiri
dari pointer bertipe integer yang bernama IntegerPointer’.
Apabila didepannya ditambahkan typedef sebagai berikut
Typedef int *IntegerPointer ;
Berarti IntegerPointer merupakan suatu tipe pointer berbentuk integer.
Apabila akan mendeklarasikan dua variable A dan B sebagai penunjuk ke
bilangan
integer :
IntegerPointer A, B ;
Berarti kompiler C akan berisi nilai dari variable A dan B yang ‘menunjuk
ke integer’.
Contoh program Luas Persegi menggunakan Pointer :
#include<iostream.h>
#include<conio.h>
void main()
{
clrscr();
int L,x,y,*p;
p=&x;
cout<<"Panjang :
";
cin>>*p;
p=&y;
cout<<"Lebar : ";
cin>>*p;
L=x*y;
cout<<"Luasnya :
"<<L;
getch();
}
Hasilnya
STRUKTUR DATA LINIER
STRUKTUR DATA LINIER
Struktur data linear adalah kumpulan komponen-komponen yang tersusun
membentuk satu garis linear. Bila komponen-komponen ditambahkan (atau
dikurangi), maka struktur-struktur tersebut berkembang (atau menyusut).
Pemakaian sturktur data yang tepat di dalam proses pemrogramanakan menghasilkan
algoritma yang lebih jelas dan tepat , sehingga menjadikan program secara
keseluruhan lebih efisien dan sederhana.
Linked List
Daftar bertaut (bahasa Inggris: linked list) atau kadang-kadang disebut
dengan senarai bertaut atau senarai berantai dalam ilmu komputer merupakan
sebuah struktur data yang digunakan untuk menyimpan sejumlah objek data
biasanya secara terurut sehingga memungkinkan penambahan, pengurangan, dan
pencarian atas elemen data yang tersimpan dalam daftar dilakukan secara lebih
efektif. Pada praktiknya sebuah struktur data memiliki elemen yang digunakan
untuk saling menyimpan rujukan antara satu dengan lainnya sehingga membentuk
sebuah daftar abstrak, tiap-tiap elemen yang terdapat pada daftar abstrak ini
seringkali disebut sebagai node. karena mekanisme rujukan yang saling terkait
inilah disebut sebagai daftar berantai.
Double linked list Circular
Double Linked List Circular adalah linked list dengan menggunakan
pointer, dimana setiap node memiliki 3 field, yaitu 1 field pointer yang
menunjuk pointer berikutnya (next), 1 field menunjuk pointer sebelumnya (prev),
serta sebuah field yang berisi data untuk node tersebut.
Double Linked List Circular pointer next dan prev nya menunjuk ke dirinya
sendiri secara circular.
• Double: artinya field
pointer-nya terdiri dari dua buah dan dua arah, yaitu prev dan next
• Linked List: artinya
node-node tersebut saling terhubung satu sama lain.
• Circular: artinya
pointer next dan prev-nya menunjuk ke dirinya sendiri.
b) Double linked list Non
Circular
Double linked list non circular" adalah Double Linked List yang
memiliki 2 buah pointer yaitu pointernext dan prev.
Pointer next menunjuk pada node setelahnya dan pointer prev menunjuk pada
node sebelumnya.
Pengertian:
Double : artinya field pointer-nya dua buah dan dua arah, ke node sebelum
dan sesudahnya.
Linked List : artinya node-node tersebut saling terhubung satu sama lain.
Non Circular : artinya pointer prev dan next-nya akan menunjuk pada NULL.
c) Single linked list Circular
SLLC adalah Single Linked List yang pointer nextnya menunjuk pada dirinya
sendiri. Jika Single Linked List
tersebut terdiri dari beberapa node, maka pointer next pada node terakhir akan
menunjuk ke node terdepannya.
Pengertian:
Single : artinya field pointer-nya hanya satu buah saja dan satu arah.
Linked List : artinya node-node tersebut saling terhubung satu sama lain.
Circular : artinya pointer next-nya akan menunjuk pada dirinya sendiri
sehingga berputar.
Single linked list Non Circular :
SINGLE LINKED LIST NON CIRCULAR MENGGUNAKAN HEAD
Dibutuhkan satu buah variabel pointer : head yang akan selaku menunjuk
pada node pertama
Deklarasi Pointer Penunjuk Head Single Linked List sebagai berikut :
TNode*head
Tambah data Di Depan
Penambahan data baru akan dikaitan di node paling depan, namun pada daat
pertama kali (data masih kosong), maka penambahan data dilakukan dengan cara :
node head ditunjukan ke node baru tersebut
Prinsipnya adalah mengkaitkan node baru dengan head, kemudian head akan
menunjuk pada data baru tersebut sehingga head akan tetap sekaku menjadi data
terdepan.
Menambah Node Di Belakang
Penambahan dilakukan di belakang, namin pada saat pertama kali, node
langsung ditunjuk oleh head, membutuhkan pointer bantu untuk mengetahui node
terbelakang kemudian dikaitkan dengan node baru, perlu digunakan perulangan.
Menghapus Data Di Depan
Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk
oleh pointer, maka harus dilakukan penggunaan suatu pointer lain (hapus) yang
digunakan untuk menunjuk node yang akan dihapus, barulah kemusian menghapus
pointer menggunakan perintah delete. Sebelum data terdepan terhapus, terlebih
dahulu head harus menunhuk ke alamat berikutnya agar list tidak putus, jika
head masih NULL berarti data masih kosong.
Menghapus Data Di Belakang
Membutuhkan pointer bantu dan hapus. Pointer hapus digunakan untuk
menunjuk node yang akan dihapus, Pointer bantu untuk menunjuk node sebelum node
yang akan dihapus yang akan menjadi node yang terakhir. Pointer bantu digunakan
untuk menunjuk ke nilai NULL selalu bergerak sampai sebelum node yang akan
dihapus kemudian pointer hapus diletakan setelah pointer bantu. Selanjutnya
pointer hapus akan menunjuk ke NULL.
Struktur data Non linear
Struktur
data Non linear:
Tree
Binary tree
- Tree adalah sebuah Pohon adalah suatu
struktur data yang digunakan secara luas yang menyerupai struktur pohon dengan
sejumlah simpul yang terhubung.
- Binary tree adalah pohon biner (binary
tree) adalah sebuah pohon struktur data dimana setiap simpul memiliki paling
banyak dua anak,secara khusunya anaknya dinamakan kiri kanan.
Graph
Graph
adalah kumpulan dari simpul dan busur yang secara matematis dinyatakan sebagai
:
G = (V, E)
Dimana
G = Graph
V = Simpul
atau Vertex, atau Node, atau Titik
E = Busur
atau Edge, atau arc
Sebuah
graph mungkin hanya terdiri dari satu simpul
Sebuah
graph belum tentu semua simpulnya terhubung dengan busur
Sebuah
graph mungkin mempunyai simpul yang tak terhubung dengan simpul yang lain
Sebuah
graph mungkin semua simpulnya saling berhubungan
Graph tak
berarah (undirected graph atau non-directed graph) :
Urutan
simpul dalam sebuah busur tidak dipentingkan. Mis busur e1 dapat disebut busur
AB atau BA
Graph
berarah (directed graph) :
Urutan
simpul mempunyai arti. Mis busur AB adalah e1 sedangkan busur BA adalah e8.
Graph
Berbobot (Weighted Graph)
Jika
setiap busur mempunyai nilai yang menyatakan hubungan antara 2 buah simpul,
maka busur tersebut dinyatakan memiliki bobot.
Contoh Program Single List Non Circular
Contoh Program Pertama.
#include <iostream.h>
#include <conio.h>
#include <process.h>
#define null 0
typedef struct tnode
{
int data;
tnode*next;
};
tnode *head;
/*void init()
{
head=null;
};*/
int isempty()
{
if(head==null)return 1;
else return 0;
};
void insertdepan(int databaru)
{
tnode *baru;
baru=new tnode;
baru->data=databaru;
baru->next=null;
if(isempty()==1)
{
head=baru;
head->next=null;
}
else
{
baru->next=head;
head=baru;
}
cout<<"data masuk\n";
getch();
}
void insertbelakang(int databaru)
{
tnode *baru,*bantu;
baru=new tnode;
baru->data=databaru;
baru->next=null;
if(isempty()==1)
{
head=baru;
head->next=null;
}
else
{
bantu=head;
while(bantu->next!=null)
{
bantu=bantu->next;
}
bantu->next=baru;
}
cout<<"data masuk\n";
getch();
}
void tampil()
{
tnode *bantu;
bantu=head;
if(isempty()==0)
{
while(bantu!=null)
{
cout<<bantu->data<<" ";
bantu=bantu->next;
}
cout<<endl;
}
else
{
cout<<"masih kosong";
}
getch();
}
void main()
{
int pil,bil;
pil=0;
while(pil!=3)
{
clrscr();
cout<<"1. Insertdepan\n";
cout<<"2. Insertbelakang\n";
cout<<"3. tampil\n";
cout<<"Masukkan pilihan anda: ";cin>>pil;
switch(pil)
{
case 1:
cout<<"Masukkan bilangan: ";cin>>bil;
insertdepan(bil);
break;
case 2:
cout<<"Masukkan bilangan: ";cin>>bil;
insertbelakang(bil);
break;
case 3:tampil();
break;
default:cout<<"salah pilih";
}
}
}
Contoh Program Kedua
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<dos.h>
class list
{
struct data
{
int kode;
char nama[30];
long harga;
struct data *next;
};
public:
typedef struct data node;
typedef node * pnode;
pnode isi();
int menu(void);
void tambah(pnode *awal,pnode baru);
void hapus(pnode *awal);
void cari(pnode awal,int cari);
void tampil(pnode awal);
void load();
void burung();
};
int list::menu()
{
textcolor(WHITE);
int pilihan;
clrscr();
gotoxy(27,6);
cout<<"----------------------\n";delay(75);
sound(2500);delay(10);nosound();
gotoxy(27,7);
cout<<" Menu List\n";delay(75);
sound(2500);delay(10);nosound();
gotoxy(27,8);
cout<<"----------------------\n";delay(75);
sound(2500);delay(10);nosound();
gotoxy(27,9);
cout<<"1. Menambah Barang\n";delay(75);
sound(2500);delay(10);nosound();
gotoxy(27,10);
cout<<"2. Menghapus Barang\n";delay(75);
sound(2500);delay(10);nosound();
gotoxy(27,11);
cout<<"3. Mencari Barang\n";delay(75);
sound(2500);delay(10);nosound();
gotoxy(27,12);
cout<<"4. Menampilkan Barang\n";delay(75);
sound(2500);delay(10);nosound();
gotoxy(27,13);
cout<<"5. Keluar Program\n"; delay(75);
sound(2500);delay(10);nosound();
gotoxy(27,14);
cout<<"----------------------\n";delay(75);
sound(2500);delay(10);nosound();
gotoxy(27,15);
cout<<"Pilihan [1-5] : ";delay(75);
cin>>pilihan;
sound(2500);delay(10);nosound();
return(pilihan);
}
void main()
{
nosound();
clrscr();
list elemen;
int pilih=1;
int cari;
pnode awal=NULL;
pnode baru;
elemen.burung();
elemen.load();
nosound();
while(pilih!=5)
{
pilih=elemen.menu();
clrscr();
switch(pilih)
{
case 1 :
{
baru=elemen.isi();
elemen.tambah(&awal,baru);
break;
}
case 2 :
{
elemen.hapus(&awal);
break;
}
case 3 :
{
cout<<"masukan Kode : ";
cin>>cari;
elemen.cari(awal,cari);
break;
}
case 4 :
{
elemen.tampil(awal);
break;
}
case 5 :
{
break;
}
default :
cout<<"The Wrong Choice!";
cout<<"\n\nPress anykey to continue!!!";
getch();
}
}
}
void list::tambah (pnode *awal,pnode baru)
{
if (*awal==NULL)
*awal=baru;
else
{
baru->next=*awal;
*awal=baru;
}
}
void list::hapus(pnode *awal)
{
pnode ph,predph;
ph = *awal;
if(*awal==NULL)
{
cout<<"List Kosong";
}
else
{
if(ph -> next==NULL)
{
*awal=NULL;
free(ph);
}
else
{
while(ph -> next!=NULL)
{
predph = ph;
ph = ph->next;
}
predph -> next=NULL;
free(ph);
}
cout<<"Deleting Data...\n";
}
cout<<"\n\nPress anykey to continue!!!";
getch();
}
void list::cari(pnode awal, int cari)
{
pnode posisi;
posisi=awal;
if(posisi==NULL)
cout<<"List Kosong";
else
{
cout<<" Data Barang\n";
cout<<"---------------------\n";
cout<<"Kode "<<"\tNama "<<"\tHarga \n";
while(posisi!=NULL && posisi -> kode!=cari)
{
posisi=posisi->next;
}
if(posisi!=NULL)
{
cout<<"---------------------\n";
cout<<posisi->kode<<"\t"<<posisi->nama<<"\t"<<posisi->harga<<endl;
cout<<"---------------------\n";
}
else
{
clrscr();
cout<<"Kode Barang Tidak Ada !!";
}
}
cout<<"\n\nPress anykey to continue!!!";
getch();
}
void list::tampil(pnode awal)
{
pnode posisi;
posisi=awal;
if(posisi==NULL)
cout<<"List Kosong";
else
{
cout<<" Data Barang\n";
cout<<"---------------------\n";
cout<<"Kode "<<"\tNama "<<"\tHarga \n";
while(posisi!=NULL)
{
cout<<"---------------------\n";
cout<<posisi->kode<<"\t"<<posisi->nama<<"\t"<<posisi->harga<<endl;
posisi=posisi->next;
}
cout<<"---------------------\n";
}
cout<<"\n\nPress anykey to continue!!!";
getch();
}
pnode list::isi(void)
{
pnode baru;
baru=(node*)malloc(sizeof(node));
cout<<"Masukkan data barang!\n\n";
cout<<"Kode : "; cin>>baru->kode;
cout<<"Nama : "; cin>>baru->nama;
cout<<"Harga: "; cin>>baru->harga;
baru->next=NULL;
cout<<"\nPress anykey to continue!!!";
getch();
return (baru);
}
void list::load()
{
int i, z;
clrscr();
textbackground(BLACK);
textcolor(WHITE);
gotoxy(32,10);
cprintf("Please wait");
gotoxy(29,11);
cprintf("Loading");
for(z=0;z<=100;z++)
{
textcolor(GREEN);
gotoxy(37,11);
cprintf("[ %d %% ]",z);
sound(100+z+z+z+z);
delay(50);
}
nosound();
clrscr();
}
void list::burung()
{
int i;
clrscr();
for(i=1500;i<2000;i++)
{
sound(i);
delay(1);
}
for(i=1500;i<2000;i++)
{
sound(i);
delay(1);
}
for(i=2000;i>1500;i--)
{
sound(i);
delay(1);
}
nosound();
Tidak ada komentar:
Posting Komentar