Queue C++
Implementasi Struktur Data Queue: Konsep FIFO dalam Pemrograman
Definisi Queue (Antrian)
Queue adalah struktur data linear yang sekumpulan elemennya dikelola menggunakan prinsip FIFO (First-In-First-Out). Artinya, elemen yang pertama kali masuk akan menjadi yang pertama kali keluar.
Dalam Queue, manipulasi data dilakukan di dua ujung yang berbeda:
Rear (Belakang): Tempat untuk menambahkan elemen baru (Enqueue).
Front (Depan): Tempat untuk menghapus atau mengambil elemen (Dequeue).
Analogi Dunia Nyata
Konsep ini sangat umum kita temui sehari-hari:
Antrian Tiket Bioskop: Orang yang datang paling awal akan dilayani dan keluar dari antrian terlebih dahulu.
Jalan Satu Arah: Mobil yang pertama kali masuk ke jalan tersebut akan menjadi yang pertama keluar di ujung jalan.
Printer Queue: Dokumen yang dikirim pertama ke printer akan dicetak lebih dulu.
Operasi Utama pada Queue
Untuk memanipulasi Queue, kita menggunakan dua operasi utama:
Enqueue: Menambahkan elemen ke posisi paling belakang (rear).
Dequeue: Menghapus elemen dari posisi paling depan (front).
Selain itu, terdapat operasi pendukung seperti isEmpty() untuk mengecek apakah antrian kosong dan isFull() untuk mengecek apakah antrian sudah mencapai kapasitas maksimal (pada implementasi array).
1. Implementasi Queue Menggunakan Array
Implementasi ini menggunakan array statis dengan ukuran tetap (MAX). Kita perlu melacak indeks front dan rear untuk mengetahui posisi elemen.
Kode Program:
using namespace std;
#define MAX 5
class Queue {
private:
int arr[MAX];
int front, rear;
public:
Queue() {
front = -1;
rear = -1;
}
bool isEmpty() {
return (front == -1);
}
bool isFull() {
return (rear == MAX - 1);
}
void enqueue(int x) {
if (isFull()) {
cout << "Queue Overflow\n";
return;
}
if (isEmpty()) {
front = 0;
}
arr[++rear] = x;
cout << "Elemen " << x << " masuk ke queue\n";
}
void dequeue() {
if (isEmpty()) {
cout << "Queue Underflow\n";
return;
}
cout << "Elemen " << arr[front] << " keluar dari queue\n";
if (front == rear) {
front = rear = -1;
} else {
front++;
}
}
void display() {
if (isEmpty()) {
cout << "Queue kosong\n";
return;
}
cout << "Isi Queue: ";
for (int i = front; i <= rear; i++) {
cout << arr[i] << " ";
}
cout << endl;
}
};
int main() {
Queue q;
q.enqueue(10);
q.enqueue(20);
q.enqueue(30);
q.display();
q.dequeue();
q.display();
return 0;
}
Output:
| Source code:Queue menggunakan array |
rear akan mencapai MAX-1 meskipun ada ruang kosong di depan. Inilah batasan array statis yang biasanya diatasi dengan konsep Circular Queue.2. Implementasi Queue Menggunakan Linked List
Kode Program:
Output:
| Source code:Queue Menggunakan Linked List |
Dengan Linked List, setiap elemen baru dialokasikan secara dinamis di memori.
front selalu menunjuk ke kepala list (head), dan rear menunjuk ke ekor list (tail). Ini lebih efisien untuk penggunaan memori jangka panjang dibandingkan array statis.
Comments
Post a Comment