🧬Praktikum 1
Pengantar
Pada percobaan ini, kita akan mengimplementasikan struktur data Queue secara sederhana dengan menggunakan class Queue. Perhatikan class diagram Queue berikut,

Langkah Percobaan
Buatlah proyek dengan nama "
Praktikum1
" dan buat class dengan "Queue
".Tambahkan atribut-atribut Queue sesuai diagram class, kemudian tambahkan pula
konstruktornya seperti potongan kode berikut ini.
int[] data;
int front;
int rear;
int size;
int max;
public Queue(int n) {
max = n;
data = new int[max];
size = 0;
front = rear = -1;
}
Buat method
isEmpty
bertipe boolean yang digunakan untuk mengecek apakah queue kosong.
public boolean isEmpty() {
if (size == 0) {
return true;
} else {
return false;
}
}
Buat method
isFull
bertipe boolean yang digunakan untuk mengecek apakah queue sudah penuh.
public boolean isFull() {
if (size == max) {
return true;
} else {
return false;
}
}
Buat method
peek
bertipe void untuk menampilkan elemen queue pada posisi paling depan.
public void peek() {
if (!isEmpty()) {
System.out.println("Elemen terdepan: " + data[front]);
} else {
System.out.println("Queue masih kosong");
}
}
Buat method
print
bertipe void untuk menampilkan seluruh elemen pada queue mulai dari posisi front sampai dengan posisi rear.
public void print() {
if (isEmpty()) {
System.out.println("Queue masih kosong");
} else {
int i = front;
while (i != rear) {
System.out.print(data[i] + " ");
i = (i + 1) % max;
}
System.out.println(data[i] + " ");
System.out.println("Jumlah elemen = " + size);
}
}
Buat method
clear
bertipe void untuk menghapus semua elemen pada queue.
public void clear() {
if (!isEmpty()) {
front = rear = -1;
size = 0;
System.out.println("Queue behasil dikosongkan");
} else {
System.out.println("Queue masih kosong");
}
}
Buat method
enqueue
bertipe void untuk menambahkan isi queue dengan parameterdt
yang bertipe integer.
public void enqueue(int dt) {
if (isFull()) {
System.out.println("Queue sudah penuh");
//System.exit(-1);
} else {
if (isEmpty()) {
front = rear = 0;
} else {
if (rear == max - 1) {
rear = 0;
} else {
rear++;
}
}
data[rear] = dt;
size++;
}
}
Buat method
dequeue
bertipe int untuk mengeluarkan data pada queue di posisi belakang.
public int Dequeue() {
int dt = 0;
if (IsEmpty()) {
System.out.println("Queue masih kosong");
//System.exit(-1);
} else {
dt = data[front];
size--;
if (IsEmpty()) {
front = rear = -1;
} else {
if (front == max - 1) {
front = 0;
} else {
front++;
}
}
}
return dt;
}
Selanjutnya, buat class baru dengan nama
QueueMain
tetap pada proyekPraktikum1
. Buat method menu bertipe void untuk memilih menu program pada saat dijalankan.
public static void menu() {
System.out.println("Masukkan operasi yang diinginkan:");
System.out.println("1. Enqueue");
System.out.println("2. Dequeue");
System.out.println("3. Print");
System.out.println("4. Peek");
System.out.println("5. Clear");
System.out.println("-----------------");
}
Buat fungsi main, kemudian deklarasikan
Scanner
dengan namasc
.Buat variabel
n
untuk menampung masukan berupa jumlah maksimal elemen yang dapatdisimpan pada queue.
System.out.print("Masukkan kapasitas queue: ");
int n = sc.nextInt();
Lakukan instansiasi objek
Queue
dengan namaQ
dengan mengirimkan parametern
sebagai kapasitas elemen queue.
Queue Q = new Queue(n);
Deklarasikan variabel dengan nama
pilih
bertipe integer untuk menampung pilih menu dari pengguna.Lakukan perulangan menggunakan
do-while
untuk menjalankan program secara terus menerus sesuai masukan yang diberikan. Di dalam perulangan tersebut, terdapat pemilihan kondisi menggunakanswitch-case
untuk menjalankan operasi queue sesuai dengan masukan pengguna.
do {
menu();
pilih = sc.nextInt();
switch (pilih) {
case 1:
System.out.print("Masukkan data baru: ");
int dataMasuk = sc.nextInt();
Q.Enqueue(dataMasuk);
break;
case 2:
int dataKeluar = Q.Dequeue();
if (dataKeluar != 0) {
System.out.println("Data yang dikeluarkan: " + dataKeluar);
break;
}
case 3:
Q.print();
break;
case 4:
Q.peek();
break;
case 5:
Q.clear();
break;
}
} while (pilih == 1 || pilih == 2 || pilih == 3 || pilih == 4 || pilih == 5);
Compile dan jalankan class
QueueMain
, kemudian amati hasilnya.Verifikasi hasil percobaan.

Pertanyaan
Pada konstruktor, mengapa nilai awal atribut front dan rear bernilai -1, sementara atribut size bernilai 0?
Pada method
enqueue
, jelaskan maksud dan kegunaan dari potongan kode berikut!
if (rear == max - 1) {
rear = 0;
}
Pada method
dequeue
, jelaskan maksud dan kegunaan dari potongan kode berikut!
if (front == max - 1) {
front = 0;
}
Pada method
print
, mengapa pada proses perulangan variabeli
tidak dimulai dari 0 (int i=0
), melainkanint i=front
?Perhatikan kembali method
print
, jelaskan maksud dari potongan kode berikut!
i = (i + 1) % max;
Tunjukkan potongan kode program yang merupakan queue overflow!
Pada saat terjadi queue overflow dan queue underflow, program tersebut tetap dapat berjalan dan hanya menampilkan teks informasi. Lakukan modifikasi program sehingga pada saat terjadi queue overflow dan queue underflow, program dihentikan!
Last updated