Abdul Aziz, Jurusan Informatika FMIPA UNS 2012 1 TUJUAN PEMBELAJARAN:
1. Mengimplementasikan struktur data Queue menggunakan array.
2. Mampu mengimplementasikan struktur data Queue dengan Linked List
3. Mampu memanfaatkan struktur data Queue untuk menyelesaikan permasalahan.
PENGANTAR:
Queue
Queue (antrian) adalah barisan elemen yang apabila elemen ditambah maka penambahannya berada di posisi belakang (rear) dan jika dilakukan pengambilan elemen dilakukan di elemen paling depan (front). Oleh karena itu, queue bersifat FIFO (first in first out).Operasi-operasi dasar dari sebuah queue adalah :
• Enqueue : proses penambahan elemen di posisi belakang
• Dequeue : proses pengambilan elemen di posisi depan
Selain operasi dasar di atas, ada pula operasi-operasi lain yang dapat dilakukan terhadap sebuah queue yaitu :
• Operasi pemeriksaan queue kosong (fungsi kosong)
• Operasi pemeriksaan queue penuh (fungsi penuh).
• Operasi inisialisasi queue (fungsi inisialisasi)
Representasi antrian secara sekuen relatif lebih sulit dibanding stack. Seperti dijelaskan di atas bahwa antrian juga merupakan satu kumpulan data. Dengan demikian tipe data yang sesuai untuk menyajikan antrian adalah menggunakan array atau linked list.
Implementasi Queue dengan Array
Struktur data queue dapat diimplementasikan dengan menggunakan sebuah array. Pada praktikum kali ini anda diminta untuk mencoba 3 versi implementasi queue, yakni:
• Versi 1: Implementasi queue dengan 1 variabel index, yani back untuk memantain jumlah elemen queue. Setiap ada proses dequeu harus dilakukan penggeseran elemen sebanyak jumlah elemen array-1.
• Versi 2: Implementasi queue dengan 2 variabel index, yakni back untuk memaintain
MODUL PRAKTIKUM STRUKTUR DATA & ALGORITMA (SDA)
Abdul Aziz, Jurusan Informatika FMIPA UNS 2012 2 • Versi 3: Implementasi queue dengan circular array dengan mengorbankan 1 field
array yang digunakan untuk definisi queue kosong atau queue penuh.
Berikut penjelasan implementasi queue versi 1:
• Elemen Queue disimpan dalam array A
• Variabel back digunakan untuk memantain index setelah elemen queue paling
belakang A[back]
• Elemen paling depan dari queue berada pada index 0 A[0]
• Proses enqueue (penambahan elemen) dilakukan dengan cara memasukkan data
kedalam elemen array index back A[back]=data, dan kemudian menaikkan
nilai back back++;
• Proses dequeue (pengambilan elemen) dilakukan dengan cara mengambil elemen paling depan A[0], kemudian jika ada elemen yang lain lakukan penggeseran kekiri satu langkah dari A[1] sampai dengan A[back].
Terdapat setidaknya 6 method/operasi dalam implementasi versi 1, yakni isEmpty,
isFull, makeEmpty, dequeue, enqueue, dan doubleArray.
LANGKAH PERCOBAAN 1:
Langkah 1 : Definisikan langkah-langkah yang harus dikerjakan dalam setiap operasi yang tersebut diatas.
Langkah 2: Mengkonversi kedalam coding untuk setiap operasinya pada kerangka class di bawah ini.
public class queue_array1<T> {
private T[] A;// tipe elemen queue
private int back;//untuk memaintain index setelah elemen paling blk. private static final int DEFAULT_CAPACITY = 10;//length daripada queue
public queue_array1() {...}//konstruktor untuk menciptakan queue kosong public boolean isEmpty() {...}//memeriksa apakah queue kosong
public boolean isFull() {...}//memeriksa apakah queue penuh public void makeEmpty() {...}//mengosongkan queue
//mengambil 1 elemen dari queue, dan mengembalikan nilai yang diambil public T dequeue() {...}
public void enqueue(T x) {...}//menambah 1 elemen ke dalam queue //mendobel-kan array dan melakukan copy, jika queue penuh
private void doubleArray() {...} }
Anda diminta untuk mengisi kode java untuk setiap konstruktor dan method yang diimplementasikan (kurung yang kosong).
Langkah 3: Simpan implementasi queue yang anda buat dengan nama queue_array1.java
Abdul Aziz, Jurusan Informatika FMIPA UNS 2012 3 Berikut penjelasan implementasi queue versi 2:
• Elemen Queue disimpan dalam array A
• Variabel back digunakan untuk memantain index setelah elemen queue paling
belakang A[back]
• Variabel front digunakan untuk memantain index elemen queue paling
depan A[front]
• Proses enqueue (penambahan elemen) dilakukan dengan cara memasukkan data
kedalam elemen array index back A[back]=data, dan kemudian menaikkan
nilai back back++;
• Proses dequeue (pengambilan elemen) dilakukan dengan cara mengambil elemen
paling depan A[front], kemudian naikkan nilai variabel front.
Terdapat setidaknya 6 method/operasi dalam implementasi versi 2, yakni isEmpty,
isFull, makeEmpty, dequeue, enqueue, dan doubleArray.
LANGKAH PERCOBAAN 2:
Langkah 1 : Definisikan langkah-langkah yang harus dikerjakan dalam setiap operasi yang tersebut diatas.
Langkah 2: Mengkonversi kedalam coding untuk setiap operasinya pada kerangka class di bawah ini.
public class queue_array2<T> {
private T[] A;// tipe elemen queue
private int back;//untuk memaintain index setelah elemen paling blk. private static final int DEFAULT_CAPACITY = 10;//length daripada queue
public queue_array2() {...}//konstruktor untuk menciptakan queue kosong public boolean isEmpty() {...}//memeriksa apakah queue kosong
public boolean isFull() {...}//memeriksa apakah queue penuh public void makeEmpty() {...}//mengosongkan queue
//mengambil 1 elemen dari queue, dan mengembalikan nilai yang diambil public T dequeue() {...}
public void enqueue(T x) {...}//menambah 1 elemen ke dalam queue //mendobel-kan array dan melakukan copy, jika queue penuh
private void doubleArray() {...} }
Anda diminta untuk mengisi kode java untuk setiap konstruktor dan method yang diimplementasikan (kurung yang kosong).
Langkah 3: Simpan implementasi queue yang anda buat dengan nama queue_array2.java
MODUL PRAKTIKUM STRUKTUR DATA & ALGORITMA (SDA)
Abdul Aziz, Jurusan Informatika FMIPA UNS 2012 4 Berikut penjelasan implementasi queue versi 3:
• Elemen Queue disimpan dalam array A
• Variabel back digunakan untuk memantain index setelah elemen queue paling
belakang A[back]
• Variabel front digunakan untuk memantain index elemen queue paling
depan A[front]
• Proses enqueue (penambahan elemen) dilakukan dengan cara memasukkan data
kedalam elemen array index back A[back]=data, dan kemudian menaikkan
nilai back back++, apabila nilai back berada diluar panjang array
(>=A.length) dan queue tidak penuh, reset nilai back menjadi 0.
• Proses dequeue (pengambilan elemen) dilakukan dengan cara mengambil elemen
paling depan A[front], kemudian naikkan nilai variabel front, apabila nilai
front berada diluar panjang array (>=A.length), reset nilai front menjadi 0.
• Queue dikatakan penuh apabila front=back-1.
• Queue dikatakan kosong apabila front=back.
Terdapat setidaknya 6 method/operasi dalam implementasi versi 3, yakni isEmpty,
isFull, makeEmpty, dequeue, enqueue, dan doubleArray.
LANGKAH PERCOBAAN 3:
Langkah 1 : Definisikan langkah-langkah yang harus dikerjakan dalam setiap operasi yang tersebut diatas.
Langkah 2: Mengkonversi kedalam coding untuk setiap operasinya pada kerangka class di bawah ini.
public class queue_array3<T> {
private T[] A;// tipe elemen queue
private int back;//untuk memaintain index setelah elemen paling blk. private static final int DEFAULT_CAPACITY = 10;//length daripada queue
public queue_array3() {...}//konstruktor untuk menciptakan queue kosong public boolean isEmpty() {...}//memeriksa apakah queue kosong
public boolean isFull() {...}//memeriksa apakah queue penuh public void makeEmpty() {...}//mengosongkan queue
//mengambil 1 elemen dari queue, dan mengembalikan nilai yang diambil public T dequeue() {...}
public void enqueue(T x) {...}//menambah 1 elemen ke dalam queue //mendobel-kan array dan melakukan copy, jika queue penuh
private void doubleArray() {...} }
Anda diminta untuk mengisi kode java untuk setiap konstruktor dan method yang diimplementasikan (kurung yang kosong).
Langkah 4: Buat class test untu
• Prosess dequeue dilaku
oleh variabel front).
Gambar 1. Ilus
Dalam gambar1 di atas, terlih yang menunjuk ke data berikut NULL berarti bahwa elemen ter ditunjuk oleh variabel front, se
Setiap elemen dari queue me data, dan sebagian lagi adalah
Terdapat setidaknya 4 method
Langkah 2: Mengkonversi keda bawah ini.
Abdul Aziz, Jurusan Informatika FMIPA U ntuk menguji implementasi queue yang anda bu
an Linked List
at juga diimplementasikan dengan menggun engenai implementasi queue dengan linked list:
riabel reference objek yakni front dan back.
song apabila front=back=null.
akukan dengan cara:
aru N, kemudian masukkan data baru X ke dalam
alam keadaan kosong, atur nilai front=back
idak kosong, tambahkan N dan update nilai bac
ilakukan dengan cara menghapus elemen pert ).
Ilustrasi Implementasi Queue dengan Linked Lis
rlihat bahwa ada 4 buah data. Setiap data me rikutnya, kecuali elemen yang paling belakang m n tersebut tidak menunjuk ke posisi apapun. Elem t, sedangkan elemen paling belakang ditunjuk ole
mempunyai 2 bagian yaitu bagian data yang lah penunjuk ke data berikutnya (next).
thod/operasi dalam implementasi queue dengan
dequeue, enqueue.
ngkah-langkah yang harus dikerjakan dalam se
kedalam coding untuk setiap operasinya pada
PA UNS 2012 5 k oleh variabel back.
yang bernilai dengan
ngan linked list, yakni
setiap operasi yang
MODUL PRAKTIKUM STRUKTUR DATA & ALGORITMA (SDA)
Abdul Aziz, Jurusan Informatika FMIPA UNS 2012 6
class ListNode<T> {
// Data member
private Object data; //menyimpan data queue
private ListNode next; // Reference ke node berikutnya // Konstruktor, nextNode di set null
ListNode(Object d, ListNode nextNode) {... }
}
public class queue_linkedlist<T> {
private ListNode<T> front;//menunjuk node paling depan private ListNode<T> back;//menunjuk node paling belakang
public queue_linkedlist() {...}//konstruktor
public boolean isEmpty() {...}//memeriksa apakah queue kosong public void makeEmpty() {...}//mengosongkan isi queue
public T dequeue() {...}//mengambil 1 elemen dari queue
public void enqueue(T x) {...}//menambah 1 elemen ke dalam queue }
Anda diminta untuk mengisi kode java untuk setiap konstruktor dan method yang diimplementasikan (kurung yang kosong) sesuai dengan definisi sebelumnya.
Langkah 3: Simpan implementasi queue yang anda buat dengan nama queue_linkedlist.java
Langkah 4: Buat class test untuk menguji implementasi queue yang anda buat.