praktikum 5 implementasi queue 5 implementasi queue 5

advertisement
MODUL PRAKTIKUM STRUKTUR DATA & ALGORITMA (SDA)
PRAKTIKUM
PRAKTIKUM 5 IMPLEMENTASI QUEUE
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
elemen paling belakang dan front untuk memantain elemen paling depan.
Abdul Aziz, Jurusan Informatika FMIPA UNS 2012
1
MODUL PRAKTIKUM STRUKTUR DATA & ALGORITMA (SDA)
•
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
belakangA[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 depanA[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
Langkah 4: Buat class test untuk menguji implementasi queue yang anda buat.
Abdul Aziz, Jurusan Informatika FMIPA UNS 2012
2
MODUL PRAKTIKUM STRUKTUR DATA & ALGORITMA (SDA)
Berikut penjelasan implementasi queue versi 2:
•
•
•
•
•
Elemen Queue disimpan dalam array A
Variabel back digunakan untuk memantain index setelah elemen queue paling
belakangA[back]
Variabel front digunakan untuk memantain index elemen queue paling
depanA[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 depanA[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
Langkah 4: Buat class test untuk menguji implementasi queue yang anda buat.
Abdul Aziz, Jurusan Informatika FMIPA UNS 2012
3
MODUL PRAKTIKUM STRUKTUR DATA & ALGORITMA (SDA)
Berikut penjelasan implementasi queue versi 3:
•
Elemen Queue disimpan dalam array A
Variabel back digunakan untuk memantain index setelah elemen queue paling
belakangA[back]
Variabel front digunakan untuk memantain index elemen queue paling
depanA[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 depanA[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 3: Simpan implementasi queue yang anda buat dengan nama queue_array3.java
Abdul Aziz, Jurusan Informatika FMIPA UNS 2012
4
MODUL PRAKTIKUM STRUKTUR DATA & ALGORITMA (SDA)
Langkah 4: Buat class test untuk menguji implementasi queue yang anda buat.
Implementasi Queue dengan Linked List
Struktur data queue dapat juga diimplementasikan dengan menggunakan linked list.
Berikut penjelasan detail mengenai implementasi
implementasi queue dengan linked list:
•
•
•
•
Menggunakan 2 variabel reference objek yakni front dan back..
Queue dikatakan kosong apabila front=back=null.
Proses enqueue dilakukan dengan cara:
o Buat
uat node baru N, kemudian masukkan data baru X ke dalam
alam N.
o Jika queue dalam keadaan kosong, atur nilai front=back=N.
front=back=
o Jika queue tidak kosong, tambahkan N dan update nilai back.
Prosess dequeue dilakukan dengan cara menghapus elemen pertama (yang diacu
oleh variabel front).
).
Gambar 1. Ilustrasi Implementasi Queue dengan Linked List
Dalam gambar1 di atas, terlihat bahwa ada 4 buah
buah data. Setiap data mempunyai anggota
yang menunjuk ke data berikutnya, kecuali elemen
ele
yang paling belakang menunjuk ke NULL.
NULL berarti bahwa elemen tersebut tidak menunjuk ke posisi
po apapun. Elemen
lemen paling depan
ditunjuk oleh variabel front,
ront, sedangkan elemen paling belakang ditunjuk oleh variabel back.
Setiap elemen dari queue mempunyai
memp
2 bagian yaitu bagian data yang bernilai dengan
data,, dan sebagian lagi adalah penunjuk
penu
ke data berikutnya (next).
Terdapat setidaknya 4 method/operasi
method/op
dalam implementasi queue dengan linked list,
list yakni
isEmpty, makeEmpty,
ty, dequeue, enqueue.
LANGKAH PERCOBAAN 4:
Langkah 1 : Definisikan langkah-langkah
langkah langkah yang harus dikerjakan dalam setiap operasi yang
tersebut diatas.
Langkah 2: Mengkonversi kedalam coding untuk setiap operasinya pada
pada kerangka kelas di
bawah ini.
Abdul Aziz, Jurusan
rusan Informatika FMIPA UNS 2012
201
5
MODUL PRAKTIKUM STRUKTUR DATA & ALGORITMA (SDA)
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
public
public
public
public
queue_linkedlist() {...}//konstruktor
boolean isEmpty() {...}//memeriksa apakah queue kosong
void makeEmpty() {...}//mengosongkan isi queue
T dequeue() {...}//mengambil 1 elemen dari queue
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.
LAPORAN PRAKTIKUM BERISI PEMBAHASAN LATIHAN PERCOBAAN DAN SOAL. DIKUMPULKAN MINGGU
DEPAN.
Abdul Aziz, Jurusan Informatika FMIPA UNS 2012
6
Download