Halaman 1
STRUKTUR DATA
Pertemuan 1 s.d 8Sasaran: Meningkatkan:
pemahaman pengetahuan tentang teori dasar struktur data dan penanganan data serta pembuatan algoritma dan penggunaan strukturd dalam pemrograman Materi : 1. Konsep dan Definisi - Tipe dan definisi - Operasi Data 2. Stack dan Queue
- Operasi dan aplikasi Stack
- Operasi dan aplikasi Queue dan Deque 3. Linked List
- Konsep pointer dari Linked List
- Operasi pointer dari Linked List
- Jenis Linked List Single dan Double 4. Tree dan Graph
- Terminologi, karakteristik dan struktur hirarkhi Tree
- Terminologi, Representasi dan Traversal dari Graph
Konsep
Defini Adalah Penge variabTipe D
Tipe da Hanya Ada 5 m 1. bila 2. bila bila 3. kara 4. tak 5. boo
dan Defi
isi Data h fakta ata ertian data bel Dataata sederha dimungkin macam, ya angan bulat angan real p angan real p akter bertipe (un olean (oper Rea
nisi
au kenyata a ini menana: nkan untuk aitu: t (integer) presisi tung presisi gan nsign) rator logik) Sede al Flat Double aan tercata nyiratkan
k menyimp ggal nda ) erhana at mengen suatu nil
an satu nila Tipe Da Ordinal Integer Characte Boolean nai suatu o lai bisa da
ai dalam sa ata r er n obyek alam bent
atu variabe Terstrukt Halaman tuk konst
el tur String Record array File Set 2 tanta atau
u
Halaman 3 Tipe data terstrukrur Adalah tipe data dimana satu variabel dapat menyimpan lebih dari satu nilai data Masing‐masing nilai data disebut komponen. Ada 5 macam, yaitu: 1. Data String Data yang berisi sederetan karakter dimana banyaknya karakter bisa berubah‐ ubah sesuai kebutuhan
Bentuk umum : char nama variabel[ukuran]
Contoh : char nama[30]
2. Larik (array)
dimana variabel larik hanya bisa menyimpan 1tipe data saja Bentuk umum : Tipe data namavariabel[ukuran] Contoh : float X[5]
int datax[10] 3. Record
terdiri dari beeberapa variabel dimana masing‐masing variabel bisa mempunyai tipe yang berbeda Bentuk umum : struct nama_tipe_struct { tipe field‐1; tipe field‐2; ... tipe field‐n; } var_ struct Contoh : struct data_tanggal { int tanggal; int bulan; int tahun; } struct data_mhs { char nama[25]; struct data_tanggal; } info_mhs;
Halaman 4
4. Set (himpunan)
Memungkinkan suatu lokasi memori ditempati oleh satu atau lebih variabel yang tipenya bisa berlainan. 1. union Bentuk umum: Union nama_union; Contoh: union { unsigned int data_int; unsigned char data_char[20]; } bil_x; 2. enumerius merupakan himpunan dari konstanta integer yang diberi nama Bentuk umum: enum nama_enum { konstanta_1, jonstanta_2; konstanta_n; } var_1, var_2; Contoh: enum manusia { pria, wanita }; enum manusia jenis_kelamin; Bila jenis_kelamin diisi pria maka nilai jenis kelamin=0 dan sebaliknya bila diisi wanita nilai jenis_kelamin=1 info_mhs nama_mhs data_tanggal tanggal bulan tahun
5. Fil File ter Tipe d Variab pointer Bentuk ti Contoh in pa Ar Algoritm Perm algo Dasa S S State A C A le e merupak rdiri dari s data Point el pointer r tersebut k umum: pe *nama h: nt *pa; a = &x; ( tinya poin ma dan Pem masalahan oritma yan ar‐dasar A Statement Statement ement ele Asignment Compariso Arithmatic kan organ satu atau le ter r berisi ala t) a_ponter ‘&’ berarti nter pa me mrogram nnya adala ng tepat. Algoritma: elementer kontrol menter te t(X=5, X=Y n c Statemen Char nisasi dari ebih field d amat dari i alamat) enunjuk al man ah bagaim r; dan rdiri dari: Y) nt Re Field r C i sejumlah dan field t suatu oby lamat x mana suatu File ecord Char Fiel h record se erdiri dari ek lain (ya u masalah e d Record ejenis. Ma i satu atau aitu obyek h dapat d Halaman asing‐masi u lebih kar
k yang ditu diselesaika 5 ing record rakter.
unjuk oleh an dengan d
h n
Halaman 6 Statement kontrol terdiri dari: Alternatif Pengulangan Percabangan Statement elementer: a. assignment
Untuk memberikan nilai ke variabel yang telah diseklarasikan. Bentuk pernyataannya adalah Contoh: total = 100; b. comparison Untuk keperluan pengambilan keputusan diperlukan operator relasi seperti > , < dll. , operasi aritmatik, operator Boolean. c. statement I/O Untuk memasukkan nilai ke komputer menggunakan: scanf(), getch() Untuk mengeluarkan nilai menggunakan: printf(), puts()
STACK DAN QUEUE
Stack (tumpukan) dan Queue (antrian) merupakan alokasi memory dalam bentuk array 1 dimensi atau lebih.
Aplikasi penggunaan array adalah :
Stack (tumpukan)
Queue (antrian)
Dequeue (antrian 2 pintu)
Pada Stack berlaku konsep LIFO (Last In First Out), Pada Queue berlaku konsep FIFO (First In First Out), atau FCFS (First Come First Serve)
Pemilihan ke 3 cara tersebut disesuaikan dengan permasalahan yang ada:
STACK
Adalah suatu list yang penambahan (insert) atau penghapusan (deletion), elemennya dilakukan di satu ujung (Top) Ada 3 kondisi pada stack, yaitu : Awal Top = 0 Kosong Top = 0 Penuh Top = N
Halaman 7
Proses yang dapat dilakukan pada stack adalah :
1. push: untuk memasukkan data ke dalam Stack
Langkah yang diperlukan
cek apakah Top < N
bila ya, tambahkan top dengan 1
isikan data ke stack
2. pop: mengeluarkan (delete) data dari Stack Langkah yang diperlukan :
cek apakah Top masih > 0
Bila ya, copy data ke suatu variabel
kurangkan Top dengan 1 Algoritma PUSH dan POP #include <stdio.h> void push(void); void pop(void); int x, top; int s[5], N=5; main() { char pilih; clrBarloop; { clrscr();
gotoxy(25,7); puts(“coba stack”) ; gotoxy(25,10); puts(“1. push”); gotoxy(25,13); puts(“2. pop”); gotoxy(25,16); puts(“3. exit”); gotoxy(25,19); prinyf(“Pilih :”);
scanf(“ %x “, &pilih); switch(pilih)
{
case 1: printf(“\n masukkan data x =; scanf(“ “); push(); getch(); break; case 2: pop(); getch(); break;
case 3: exit(0); } goto clrBaarloop; } } void pop(void) { If (top > 0) { x = s[top];
pritf (“\n\r x = %d top = %d”, x, top); top = top – 1;
Halaman 8
}
else { printf(“\n\r stack kosong”); } }
Soal: buat fungsi PUSH
Aplikasi stack antara lain :
1. Dalam sistem operasi, pada saat aktivitas call dan return
2. Pada proses kompilasi, untuk melakukan pengecekan kelengkapan pasangan tanda kurung, kurung kotak, dll.
QUEUE
(antrian)
Prinsip: FIFO (First In First Out) atau
FCFS (First Come First Serve)
Ada 2 macam pointer, yaitu: F(Front) dan R(Rear)
Untuk pengambilan data menggunakan pointer F sedang untuk pemasukkan data menggunakan pointer R
Bila kondisi kosong F=0 dan R=0 sedang kondisi penuh R=N maka syarat antrian adalah: F <= R Proses yang dapat dilakukan adalah: 1. INSERT, untuk memasukkan ke antrian; 2. DELETE, untuk mengeluarkan data dari antrian. Kondisi yang perlu diperhatikan adalah kondisi penuh tapi kosong yaitu F=R=N Subroutine insert: void insert(void) { if ( R< N ) { R = R+ 1; Q[R] = x; printf(“ R = %d x = %d “, R, x); } else printf(“antrian penuh”); } Soal: buat prosedur DELETE - Cek F < R - F = F + 1 - X = Q[F] - If (f=N) { F=0 ; R= 0 }
Halaman 9
STRUKTUR DATA
Pertemuan 9 s.d 18Linked
List
Pengelolaan memori secara dinamis artinya tidak perlu mengalokasikan memori lebih awal secara fixed. Pengelolaan memori secara dinamis dapat dilakukan: alokasi memori; dan dealokasi memori Alokasi memori: void * malloc ( jumlah byte ) Dealokasi memori: void free(void *nama_pointer) contoh: char *ptr; ptr = (char *) malloc(500 * sizeof (char)); free(ptr);
Ada 2 bagian pada setiap record Linked List, yaitu:
bagian data atau info; dan
bagian alamat record next
Ada 4 macam proses yaitu:
Linier Singly Linked List
Linier Doubly Linked List
1000 H Record1 2100 H 1000 H 2100 H Record2 2100 H
Halaman 10
Circular Singly Linked List
Circular Doubly Linked List
LINIER SINGLY LINKED LIST
Ada 2 bagian utama dari record Linier Singly Linked List, yaitu: 1. bagianyang berisi data/info ; dan
2. bagian yang berusu record next
Deklarasi record baru: struct simpul *p; p = (struct simpul *) malloc (sizeof simpul)); Proses yang dapat dilakukan adalah: insert record baru delete record A100 H HEAD = B100 H A100 H B100 H B100 H B100 H A100 H A100 H FIRST C100 H B100 H C100 H A100 H B100 H NIL FIRST = 1100 H A100 H 1100 H NIL 1100 H A100 H
Halaman 11 Insert: - awal - tengah - akhir Delete: - awal - tengah - akhir format record : struct simpul { char nama[20];
struct simpul *link; }
void insert_awal(void) {
struct simpul *p;
P = (struct simpul *) malloc(sizeof(struct simpul)); strcpy(p-> nama, nama); *strcpy=string Copy
if (first != NULL) * != tidak sama dgn {
p->link = first; first = p;
printf(“\n sisip awal”); }
else {
p->link = NULL; first = p;
printf(“\n create file”); } } void insert_tengah(void) { struct simpul *p , *q, *k;
p = (struct simpul *) malloc(sizeof(struct simpul)); strcpy(p->nama, nama);
if (first != NULL) {
q = first;
while (q-> nama < nama) {
k = q;
q = q->link; }
Halaman 12
k->link = p;
printf(“\n sisip tengah “); } else { insert_awal()} } } void delete_awal(void) { struct simpul *p; if (first != NULL) { p = first; first = first->link; p->link = NULL; strcpy(nama,p->nama); free(p);
printf(“\n nama = % s”,nana); }
else {
printf(“\n list kosong“); } } void delete_akhir(void) { struct simpul *p, *q; if (first !=NULL) { p = first;
While (p->link != NULL) {
q = p;
p = p->link;} q->link = NULL;
strcpy(nama, q->nama);
printf(“\n nama =5s “, nama); free(p); } } }
Halaman 13
Circular Doubly Linked List
Kondisi kosong : head‐>right = head; head‐>left = head; Kondisi isi: Record‐1 : head‐>right Record head tidak berisi data void insert_tengah(void) { struct simpul *p, *q;
p = (struct simpul *) malloc(sizeof(struct simpul); strcpy(p->nama,nama);
if (head->right) != head) { q = head-> right;
while (q->nama < nama) { q = q->right; } p->right = q p->left = q->left; q->left->right = p; q->left = p;
printf(“ \n sisip tengah”); } else {
p->right = head; p->left = heat; head->right = p;
head->left = p;
printf(“ \n create file”); }
}
Halaman 14 Circular Doubly Linked List Kondisi kosong: Head ‐> right = head; Head ‐> left = head; Kondisi isi: Record‐1: head‐>right; Record head tidak berisi data; void insert_tengah(void) { struct simpul *p, *q;
p = (struct simpul *) malloc(sizeof(struct simpul); strcpy(p->nama,nama);
if (head->right) != head){ q = head-> right;
while (q->nama < nama) { q = q->right; } p->right = q p->left = q->left; q->left->right = p; q->left = p; printf(“sisip tengah”); } else { p->right = head; p->left = heat; head->right = p; head->left = p; printf(“create file”); } } Head Head Head
Halaman 15 STRUKTUR DATA NON‐LINIER Terdiri dari : Struktur Pohon Graph STRUKTUR POHON Definisi dari pohon adalah:
Susunan dari satu atau lebih simpul (node) yang terdiri dari satu simpul sebagai akar (root) dan sisanya membentuk subtree dari akar.
Gambar pohon secara umum adalah sebagai berikut: Akar dari pohon ini adalah A Satu simpul berisi: data atau info alamat simpul yang dihubungkan dengan link Jumlah subtree dari satu simpul disebut derajat (degree) A berderajat 3 B ,, 1 D ,, 3
Struktur pohon yang terkenal adalah struktur pohon Biner, dimana setiap simpul maksimum derajatnya adalah 2. A C B D H I G F C K J L Level 1 Level 2 Level 3 Level 4
Halaman 16 Proses dalam struktur data akan mudah digambarkan bila diketahui: n = jumlah simpul k = derajat pohon maka : Jumlah link = n . k Jumlah null‐link = n (k‐1) +1 Jumlah non‐zero link = n‐1 Dari pohon biner diatas terlihat : n = 9 k = 2 maka : jumlah link = 9 . 2 = 18 jumlah null‐link = 9 . (2 – 1) +1 = 10 jumlah non‐zero link = 9 – 1 = 8
Penelusuran Pohon Biner
Adalah suatu ide untuk melakukan penelusuran (traversing) atau kunjungan (visiting) masing‐masing simpul sebanyak 1 kali. Penelusuran ini akan menghasilkan urutan linier dari informasi Ada 3 cara penelusuran, yaitu: inorder preorder postorder Penelusuran inorder:
Telusuri subtree kiri dalam inorder
Proses simpul akar
Telusuri subtree kanan dalam inorder
A
B C
D E F
Halaman 17 Hasil penelusuran dari pohon di atas adalah : A / B ** C * D + E Penelusuran Preorder: Proses simpul akar
Telusuri subtree kiri dalam Preorder
Telusuri subtree kanan dalam
Preorder
Lihat gambar di atas maka hasil penelusuran Preorder adalah: + * / A ** B C D E Penelusuran Postoeder: Telusuri subtree kiri dalam postorder Telusuri subtree kanan dalam postoeder Proses simpul akar Hasil penelusuran dari pohon di atas adalah: A B C ** / D * E + + * E / D A ** B C