๐งฌ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
isEmptybertipe boolean yang digunakan untuk mengecek apakah queue kosong.
public boolean isEmpty() {
if (size == 0) {
return true;
} else {
return false;
}
}Buat method
isFullbertipe boolean yang digunakan untuk mengecek apakah queue sudah penuh.
public boolean isFull() {
if (size == max) {
return true;
} else {
return false;
}
}Buat method
peekbertipe 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
printbertipe 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
clearbertipe 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
enqueuebertipe void untuk menambahkan isi queue dengan parameterdtyang 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
dequeuebertipe 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
QueueMaintetap 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
Scannerdengan namasc.Buat variabel
nuntuk menampung masukan berupa jumlah maksimal elemen yang dapatdisimpan pada queue.
System.out.print("Masukkan kapasitas queue: ");
int n = sc.nextInt();Lakukan instansiasi objek
Queuedengan namaQdengan mengirimkan parameternsebagai kapasitas elemen queue.
Queue Q = new Queue(n);Deklarasikan variabel dengan nama
pilihbertipe integer untuk menampung pilih menu dari pengguna.Lakukan perulangan menggunakan
do-whileuntuk menjalankan program secara terus menerus sesuai masukan yang diberikan. Di dalam perulangan tersebut, terdapat pemilihan kondisi menggunakanswitch-caseuntuk 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 variabelitidak 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