Pertemuan 5 Struktur Data Stack dan Queue
Pengertian ADT Spesifikasi dari sekumpulan data termasuk operasi yang dapat dilakukan pada data tersebut. (Wikipedia) Sekumpulan data dan operasi terhadap data tersebut yang definisi-nya tidak bergantung pada implementasi tertentu. (/www.nist.gov/dads/) Sekumpulan nilai dan operasi-operasi yang diizinkan padanya (http://www.scribd.com/doc/6188327/Materi-2-Tipe-Data-Abstrak)
Struktur Data = Container Sebuah struktur data dapat dipandang sebagai tempat penyimpanan benda (container). Beberapa hal yang dapat dilakukan: Menaruh benda Mengambil benda Mencari benda tertentu Mengosongkannya (atau periksa apakah kosong) Contoh Interface struktur data : void add(Benda x); void remove(Benda x); void access(Benda x); void makeEmpty(); boolean isEmpty(); Sumber; Dimodifikasi dari Ruli Manurung dan Ade Azurat, Fasilkom UI 2008
ADT: List 1 2 3 4 Indeks Sebuah List adalah kumpulan benda di mana setiap benda memiliki posisi. Setiap benda dalam List dapat diakses melalui indeks-nya. Contoh paling gampang: array! Contoh operasi pada list : void insert(int indeks, Benda x); void append(Benda x); void remove(int indeks); void remove(Benda x); Benda get(int indeks); Sumber; Dimodifikasi dari Ruli Manurung dan Ade Azurat, Fasilkom UI 2008
ADT: Stack Least recent Most recent push pop,top Sebuah Stack adalah kumpulan benda di mana benda yang baru berada di atas benda yang lama LIFO Bayangkan setumpuk koran. Benda yang paling terakhir masuk ditaruh di atas tumpukan (top) pengambilan dilakukan pada posisi top Operasi pada Stack membutuhkan waktu konstan (O(1)). Contoh operasi pada stack : void push(Benda x); Benda pop(); Benda top(); Sumber; Dimodifikasi dari Ruli Manurung dan Ade Azurat, Fasilkom UI 2008
ADT: Queue enqueue Most recent Least recent dequeue getFront Sebuah Queue adalah kumpulan benda di mana benda yang pertama masuk akan pertama keluar FIFO Bayangkan antrian printer job pada jaringan. Benda yang paling awal masuk berada di depan antrian (front). Penambahan dilakukan di belakang, penghapusan dilakukan di depan Operasi pada Queue membutuhkan waktu konstan (O(1)). Contoh operasi pada queue : void enqueue(Benda x); Benda dequeue(); Benda getFront(); Sumber; Dimodifikasi dari Ruli Manurung dan Ade Azurat, Fasilkom UI 2008
Penghapusan (dequeue) Ilustrasi Stack dan Queue Stack (LIFO) Atas (top of stack) Penambahan Penghapusan Stack (LIFO) Queue (FIFO) Queue (FIFO) Penambahan (enqueue) Penghapusan (dequeue)
Operasi-Operasi Pada Stack Initialisasi Stack. Pop benda dari posisi top stack. Push benda ke dalam posisi top. Apakah Stack kosong? Jangan underflow Apakah Stack penuh? Jangan overflow Mengosongkan Stack Menentukan Ukuran Stack
Operasi-Operasi Pada Queue Inisialisasi queue. Antrikan benda ke bagian belakang queue. Layani benda dari bagian depan queue. Apakah queue kosong? Apakah queue penuh? Berapa ukuran queue?
Implementasi Stack dengan Array Operasi Push Operasi Pop void push(stack t, int x); { t.top = t.top+1; t.isi[t.top] = x; } void pop(stack t); { t.top = t.top-1; }
Proses push pada Stack Top Sesudah Top Sebelum
Proses Pop pada Stack Benda keluar dari stack Top Sebelum Sesudah Top
Pintu masuk Casting Film : Ice Scream 5. Meri 4. Mira 3. Deni 2. Gani Antri sesuai nomor kedatangan 5. Meri 4. Mira 3. Deni 2. Gani 1. Sandi Pintu keluar
Implementasi Queue dengan Array secara Linear 1 2 3 4 5 6 7 dog fish duck cat finch Depan Belakang
Antrikan snake 1 2 3 4 5 6 7 dog fish duck cat finch snake Depan 1 2 3 4 5 6 7 dog fish duck cat finch snake Depan Belakang Antrikan
Antrikan eel 1 2 3 4 5 6 7 dog fish duck cat finch snake eel Depan 1 2 3 4 5 6 7 dog fish duck cat finch snake eel Depan Belakang Antrikan
Layani 1 2 3 4 5 6 7 fish duck cat finch snake eel Depan Belakang dog 1 2 3 4 5 6 7 fish duck cat finch snake eel Depan Belakang dog Ini keluar dari queue Layani
Layani 1 2 3 4 5 6 7 duck cat finch snake eel Depan Belakang fish 1 2 3 4 5 6 7 duck cat finch snake eel Depan Belakang Layani fish Ini keluar dari queue
Antrikan tiger 1 2 3 4 5 6 7 duck cat finch snake eel tiger Depan 1 2 3 4 5 6 7 duck cat finch snake eel tiger Depan Belakang Antrikan
Antrikan Ada ruang TAK ADA RUANG ape 1 2 3 4 5 6 7 duck cat finch 1 2 3 4 5 6 7 duck cat finch snake eel tiger TAK ADA RUANG Ada ruang Depan Belakang Antrikan
Implementasi secara sirkuler 7 6 1 5 2 4 3
Implementasi secara sirkuler Antrikan ape 1 2 3 4 5 6 7 ape duck cat finch snake eel tiger Belakang Depan
Kondisi Kritis : Kosong Depan/front Belakang/Tail/Rear Hapus !!! Max Underflow So…. Penambahan elemen akan menambah nilai Belakang/Tail/Rear Penghapusan elemen akan menambah nilai Depan/Front ……Front dan tail selalu bergerak maju………………….. Representasi Antrian dalam dua cara : Linier dan circular
Representasi Linier Max II I Max Max III 1. Kondisi Awal 3 2 4 5 6 Max Depan/front = 1 Belakang/Tail/Rear = 1 II I Max 6 1. Kondisi Awal 5 2. Penambahan Awal Belakang := Belakang + 1; Antrian [Belakang] := x; 4 3 2 1 3 2 4 5 6 Max III Depan/front = 1 Belakang/Tail/Rear = 4 1 Depan/front = 1 Belakang/Tail/Rear = 0 # Kondisi Kosong, jika Belakang < Depan
Representasi Linier Max Max 3. Penghapusan 4. Penambahan sampai penuh 6 3. Penghapusan 5 X := Antrian [Depan]; 4 Depan := Depan + 1; 3 4. Penambahan sampai penuh 1 3 2 4 5 6 Max Depan/front = 3 Belakang/Tail/Rear = 6 Jumlah Elemen Antrian : Belakang - Depan + 1 2 1 Depan/front = 3 Belakang/Tail/Rear = 4
Kekurangan Representasi Linier Kondisi Antrian : Max 6 Depan/front = 3 5 Belakang/Tail/Rear = 6 4 Jumlah elemen antrian = 6 - 3 + 1 = 4 3 Tempat Kosong = 6 - 4 = 2 2 1 3 2 4 5 6 Max 1 Penambahan ???? Belakang := Belakang + 1; Antrian [Belakang] := x; Akan terjadi Overflow, walaupun ada 2 tempat yang masih kosong !!
Solusi I : Melakukan Pergeseran Pergeseran elemen Max 6 Prosedur penghapusan ditambah dengan pergeseran 5 “Jika ada elemen yang di hapus, maka elemen diatasnya bergeser hingga nilai Depan selalu sama dengan 1”. 4 3 2 X := Antrian[1]; For I := 1 to Belakang - 1 do Antrian[I] := Antrian[I + 1]; Belakang := Belakang - 1 1 3 2 4 5 6 Max 1 Trouble !! Bagaimana kalo jumlah elemennya 10000 ????? Solusi II : Menggunakan variabel dinamis (pointer) dengan linked list
Penyajian PUSH Stack dengan Linked List Isi : 23 Now Top Isi : 23 Now Top Isi : 11 Top (a) (b) (c) Isi : 23 Now Top Isi : 11 Isi : 52 (d)
Penyajian POP Stack dengan Linked List Isi : 23 Hapus Isi : 11 Isi : 52 Top 52 elemen (a) Isi : 23 Hapus Isi : 11 11 elemen Top (b) Hapus Isi : 23 23 elemen Top (c)
Operasi Penambahan isi Queue dengan Linked List 1 2 3 4 5 head akhir tail
Operasi Penghapusan isi Queue dengan Linked List 1 2 3 5 head tail hapus 4 bantu 1 2 3 5 head tail hapus 4 bantu 1 2 3 5 head tail hapus 4 bantu
Latihan Buatlah sebuah algoritma untuk menetukan apakah sebuah kata adalah palindrome atau tidak Perhatikan gambar di bawah ini: