Modul 5 Implementasi Queue SDA

  TUJUAN PEMBELAJARAN: 1.

   Mengimplementasikan struktur data Queue menggunakan array.

   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, ya>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.

  • 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]

  A[0]

  • Elemen paling depan dari queue berada pada index 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

  A[0], kemudian jika ada elemen yang lain lakukan penggeseran paling depan 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.

  Berikut penjelasan implementasi queue versi 2:

  • Elemen Queue disimpan dalam array A • Variabel back digunakan untuk memantain index setelah elemen queue paling

  A[back] belakang

  • Variabel front digunakan untuk memantain index elemen queue paling

  A[front] depan

  • 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 Langkah 4: Buat class test untuk menguji implementasi queue yang anda buat.

  Berikut penjelasan implementasi queue versi 3:

  • Elemen Queue disimpan dalam array A • Variabel back digunakan untuk memantain index setelah elemen queue paling

  A[back] belakang

  • Variabel front digunakan untuk memantain index elemen queue paling

  A[front] depan

  • 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

  A[front], kemudian naikkan nilai variabel front, apabila nilai paling depan 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

  Langkah 4: Buat class test untu ntuk menguji implementasi queue yang anda bu a buat.

  Implementasi Queue dengan an Linked List Struktur data queue dapat at juga diimplementasikan dengan menggun gunakan linked list. Berikut penjelasan detail meng engenai implementasi queue dengan linked list: list: riabel reference objek yakni front dan back. .

  • Menggunakan 2 variabe song apabila front=back=null.
  • Queue dikatakan koson akukan dengan cara:
  • Proses enqueue dilakuk o aru N, kemudian masukkan data baru X ke dalam alam N.

  Buat node baru o alam keadaan kosong, atur nilai front=back k=N. Jika queue dalam o ck. idak kosong, tambahkan N dan update nilai bac

Jika queue tidak ilakukan dengan cara menghapus elemen pert pertama (yang diacu

  • Prosess dequeue dilaku oleh variabel front). ).

  Gambar 1. Ilus Ilustrasi Implementasi Queue dengan Linked Lis d List Dalam gambar1 di atas, terlih rlihat bahwa ada 4 buah data. Setiap data me mempunyai anggota yang menunjuk ke data berikut rikutnya, kecuali elemen yang paling belakang m menunjuk ke NULL.

  NULL berarti bahwa elemen ter n tersebut tidak menunjuk ke posisi apapun. Elem lemen paling depan ditunjuk oleh variabel front, se t, sedangkan elemen paling belakang ditunjuk ole k oleh variabel back. Setiap elemen dari queue me mempunyai 2 bagian yaitu bagian data yang yang bernilai dengan data, dan sebagian lagi adalah lah penunjuk ke data berikutnya (next). Terdapat setidaknya 4 method thod/operasi dalam implementasi queue dengan ngan linked list, yakni isEmpty, makeEmpty, dequeue, enqueue.

  LANGKAH PERCOBAAN 4: Langkah 1 : Definisikan langka ngkah-langkah yang harus dikerjakan dalam se setiap operasi yang tersebut diatas.

  Langkah 2: Mengkonversi keda kedalam coding untuk setiap operasinya pada da kerangka kelas di bawah ini.

  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.

  LAPORAN PRAKTIKUM BERISI PEMBAHASAN LATIHAN PERCOBAAN DAN SOAL. DIKUMPULKAN MINGGU DEPAN.