Latihan: Antrean Melingkar
Mengimplementasikan operasi Add dan Del pada struktur Queue berbasis Array menggunakan teknik Circular Buffer untuk mengatasi masalah penuh semu.
Mengimplementasikan operasi Add dan Del pada struktur Queue berbasis Array menggunakan teknik Circular Buffer untuk mengatasi masalah penuh semu.
Kamu ditugaskan untuk membuat sistem mesin antrean digital di sebuah Bank. Antrean maksimal yang bisa ditampung di ruang tunggu adalah 5 orang (kapasitas MaxEl = 5).
Pada sistem antrean versi lama, ketika 5 nomor antrean sudah dicetak, mesin mengira ruang tunggu sudah penuh, padahal 2 orang pertama sudah selesai dilayani dan pulang! Ini adalah kelemahan dari Queue Array tradisional yang disebut Penuh Semu.
Untuk memperbaikinya, kamu harus menerapkan Circular Buffer (Antrean Berputar). Saat antrean mencapai batas maksimal, nomor antrean yang baru masuk (TAIL) harus secara otomatis menggunakan kursi nomor 1 yang sudah ditinggalkan orang pertama.
Kamu hanya perlu melengkapi logika pemutaran batas pada fungsi Add dan Del:
Add: Saat menambahkan data baru, periksa penunjuk TAIL. Jika TAIL sudah menyentuh angka MaxEl, paksa TAIL kembali ke nilai 1. Jika belum menyentuh maksimal, cukup lakukan TAIL++ seperti biasa.Del: Sama halnya dengan penambahan, saat melayani atau menghapus data terdepan, periksa HEAD. Jika HEAD sedang berada di MaxEl, paksa ia berputar kembali ke angka 1. Jika tidak, lakukan HEAD++.Program akan menampilkan log penambahan nasabah, status kapasitas, pelayanan (penghapusan), dan pembuktian bahwa indeks TAIL berhasil berputar kembali ke angka 1 setelah melebihi kapasitas maksimal.
Program membuktikan bahwa indeks TAIL berhasil berputar kembali ke angka 1 setelah antrean di depannya sudah dilayani.
Output:
=== SIMULASI ANTREAN BANK (CIRCULAR) ===
Nasabah masuk ke antrean: 101
Nasabah masuk ke antrean: 102
Nasabah masuk ke antrean: 103
Nasabah masuk ke antrean: 104
Nasabah masuk ke antrean: 105
[Status] HEAD: 1, TAIL: 5, Isi: 101 102 103 104 105
Antrean Penuh! Tidak bisa memasukkan 106
Melayani nasabah...
Nasabah terlayani: 101
Nasabah terlayani: 102
[Status] HEAD: 3, TAIL: 5, Isi: 103 104 105
Nasabah baru datang...
Nasabah masuk ke antrean: 107
[Status] HEAD: 3, TAIL: 1, Isi: 103 104 105 107Hint: Mengapa Tidak Perlu Menggeser Data?
Secara fisik di memori array, data 107 ditaruh di depan data 103. Namun secara logika antrean, data 103 tetaplah kepala yang akan dilayani lebih dulu. Inilah kejeniusan dari sistem Circular Buffer—kita tidak perlu membuang waktu untuk menggeser-geser data di memori fisik!