Pertemuan 7 - Queue di C++
- Dapatkan link
- X
- Aplikasi Lainnya
Queue di C++
1. Implementasi Queue pada Array
Deskripsi (Fungsi) Program:
Code:
Penjelasan Program:
Baris Kode
Penjelasan
// implementasi Queue pada Array di C++
Komentar program, tidak dieksekusi oleh kompilator. Menjelaskan tujuan kode.
#include <bits/stdc++.h>
Mengimpor seluruh library standar C++ sekaligus (termasuk fungsi input/output seperti cout).
#define max 5
Mendefinisikan konstanta bernama max dengan nilai 5. Ini akan menjadi kapasitas maksimal antrean.
using namespace std;
Mengizinkan penggunaan fungsi standar (seperti cout, endl) tanpa perlu menuliskan awalan std::.
class Queue {
Memulai definisi sebuah class (cetak biru) dengan nama Queue.
private:
Penanda bahwa anggota di bawah ini bersifat privat (hanya bisa diakses dari dalam class Queue).
int arr[max];
Mendeklarasikan array bertipe integer bernama arr dengan ukuran 5. Ini adalah tempat menyimpan data.
int front, rear;
Mendeklarasikan dua variabel integer untuk melacak indeks elemen terdepan (front) dan paling belakang (rear).
public:
Penanda bahwa fungsi di bawah ini bersifat publik (bisa dipanggil dari luar class, misal dari main()).
Queue() {
Memulai Constructor, yaitu fungsi yang otomatis dijalankan saat objek Queue pertama kali dibuat.
front = -1;
Menginisialisasi front dengan nilai -1, menandakan belum ada elemen terdepan (antrean kosong).
rear = -1;
Menginisialisasi rear dengan nilai -1, menandakan belum ada elemen paling belakang.
}
Menutup blok fungsi Constructor.
bool isEmpty() {
Memulai fungsi untuk mengecek apakah antrean kosong. Mengembalikan nilai boolean (true/false).
return (front == -1);
Mengembalikan true jika nilai front adalah -1 (berarti kosong), dan false jika tidak.
}
Menutup blok fungsi isEmpty().
bool isFull() {
Memulai fungsi untuk mengecek apakah antrean sudah penuh.
return (rear == max - 1);
Mengembalikan true jika rear sudah mencapai indeks terakhir array (max - 1 atau 4).
}
Menutup blok fungsi isFull().
void enqueue(int x) {
Memulai fungsi untuk memasukkan elemen baru (x) ke dalam antrean.
if(isFull()) {
Mengecek kondisi: Jika antrean sudah penuh (memanggil fungsi isFull()), maka...
cout << "Queue Overflow\n";
...cetak pesan "Queue Overflow" (Antrean luber/penuh).
return;
Keluar dari fungsi enqueue tanpa memasukkan data apa-apa.
}
Menutup blok if(isFull()).
if(isEmpty()) {
Mengecek kondisi: Jika antrean saat ini benar-benar kosong, maka...
front = 0;
...atur front menjadi 0 (menunjuk ke indeks pertama array).
}
Menutup blok if(isEmpty()).
arr[++rear] = x;
Menaikkan nilai rear sebanyak 1 (menggunakan pre-increment ++rear), lalu memasukkan nilai x ke indeks tersebut.
cout << "Elemen " << x << " masuk ke Queue\n";
Mencetak pesan konfirmasi bahwa elemen x berhasil dimasukkan.
}
Menutup blok fungsi enqueue().
void dequeue() {
Memulai fungsi untuk menghapus/mengeluarkan elemen dari antrean terdepan.
if(isEmpty()) {
Mengecek kondisi: Jika antrean kosong, maka...
cout << "Queue Underflow\n";
...cetak pesan "Queue Underflow" (Tidak ada data yang bisa dikeluarkan).
return;
Keluar dari fungsi dequeue.
}
Menutup blok if(isEmpty()).
cout << "Elemen " << arr[front] << " keluar ke Queue\n";
Mencetak informasi nilai elemen yang ada di indeks front (elemen yang akan dihapus).
if(front == rear) {
Mengecek kondisi: Jika front sama dengan rear (artinya hanya tersisa 1 elemen di antrean), maka...
front = rear = -1;
...kembalikan status antrean menjadi kosong sepenuhnya dengan mereset front dan rear ke -1.
} else {
Jika elemen di antrean lebih dari satu, maka...
front++;
...geser front mundur satu langkah (ditambah 1) untuk menunjuk ke orang/elemen berikutnya.
}
Menutup blok if-else.
}
Menutup blok fungsi dequeue().
void display() {
Memulai fungsi untuk mencetak seluruh isi antrean saat ini.
if(isEmpty()) {
Mengecek kondisi: Jika antrean kosong, maka...
cout << "Queue kosong\n";
...cetak pesan "Queue kosong".
return;
Keluar dari fungsi display.
}
Menutup blok if(isEmpty()).
cout << "Isi Queue: ";
Mencetak teks awalan "Isi Queue: ".
int i;
Mendeklarasikan variabel i untuk digunakan dalam perulangan (loop).
for(i = front; i <= rear; i++) {
Memulai perulangan dari indeks front (terdepan) hingga indeks rear (paling belakang).
cout << arr[i] << " ";
Mencetak elemen array pada indeks ke-i diikuti dengan spasi.
}
Menutup blok perulangan for.
cout << endl;
Pindah ke baris baru (enter) setelah semua elemen dicetak.
}
Menutup blok fungsi display().
};
Menutup definisi class Queue. Tanda titik koma (;) di sini wajib ada.
int main(void) {
Memulai fungsi utama, titik awal program berjalan.
Queue q;
Membuat sebuah objek instansiasi dari class Queue dengan nama variabel q.
q.enqueue(10);
Memanggil fungsi enqueue pada objek q untuk memasukkan angka 10.
q.enqueue(20);
Memanggil fungsi enqueue pada objek q untuk memasukkan angka 20.
q.enqueue(30);
Memanggil fungsi enqueue pada objek q untuk memasukkan angka 30.
q.display();
Memanggil fungsi display untuk menampilkan isi antrean (Hasil: 10 20 30).
q.dequeue();
Memanggil fungsi dequeue untuk menghapus elemen terdepan (10 dihapus).
q.display();
Memanggil fungsi display lagi untuk menampilkan isi antrean terbaru (Hasil: 20 30).
return 0;
Mengembalikan nilai 0 ke sistem operasi, menandakan program selesai tanpa error.
}
Menutup fungsi main().
Baris Kode | Penjelasan |
// implementasi Queue pada Array di C++ | Komentar program, tidak dieksekusi oleh kompilator. Menjelaskan tujuan kode. |
#include <bits/stdc++.h> | Mengimpor seluruh library standar C++ sekaligus (termasuk fungsi input/output seperti cout). |
#define max 5 | Mendefinisikan konstanta bernama max dengan nilai 5. Ini akan menjadi kapasitas maksimal antrean. |
using namespace std; | Mengizinkan penggunaan fungsi standar (seperti cout, endl) tanpa perlu menuliskan awalan std::. |
class Queue { | Memulai definisi sebuah class (cetak biru) dengan nama Queue. |
private: | Penanda bahwa anggota di bawah ini bersifat privat (hanya bisa diakses dari dalam class Queue). |
int arr[max]; | Mendeklarasikan array bertipe integer bernama arr dengan ukuran 5. Ini adalah tempat menyimpan data. |
int front, rear; | Mendeklarasikan dua variabel integer untuk melacak indeks elemen terdepan (front) dan paling belakang (rear). |
public: | Penanda bahwa fungsi di bawah ini bersifat publik (bisa dipanggil dari luar class, misal dari main()). |
Queue() { | Memulai Constructor, yaitu fungsi yang otomatis dijalankan saat objek Queue pertama kali dibuat. |
front = -1; | Menginisialisasi front dengan nilai -1, menandakan belum ada elemen terdepan (antrean kosong). |
rear = -1; | Menginisialisasi rear dengan nilai -1, menandakan belum ada elemen paling belakang. |
} | Menutup blok fungsi Constructor. |
bool isEmpty() { | Memulai fungsi untuk mengecek apakah antrean kosong. Mengembalikan nilai boolean (true/false). |
return (front == -1); | Mengembalikan true jika nilai front adalah -1 (berarti kosong), dan false jika tidak. |
} | Menutup blok fungsi isEmpty(). |
bool isFull() { | Memulai fungsi untuk mengecek apakah antrean sudah penuh. |
return (rear == max - 1); | Mengembalikan true jika rear sudah mencapai indeks terakhir array (max - 1 atau 4). |
} | Menutup blok fungsi isFull(). |
void enqueue(int x) { | Memulai fungsi untuk memasukkan elemen baru (x) ke dalam antrean. |
if(isFull()) { | Mengecek kondisi: Jika antrean sudah penuh (memanggil fungsi isFull()), maka... |
cout << "Queue Overflow\n"; | ...cetak pesan "Queue Overflow" (Antrean luber/penuh). |
return; | Keluar dari fungsi enqueue tanpa memasukkan data apa-apa. |
} | Menutup blok if(isFull()). |
if(isEmpty()) { | Mengecek kondisi: Jika antrean saat ini benar-benar kosong, maka... |
front = 0; | ...atur front menjadi 0 (menunjuk ke indeks pertama array). |
} | Menutup blok if(isEmpty()). |
arr[++rear] = x; | Menaikkan nilai rear sebanyak 1 (menggunakan pre-increment ++rear), lalu memasukkan nilai x ke indeks tersebut. |
cout << "Elemen " << x << " masuk ke Queue\n"; | Mencetak pesan konfirmasi bahwa elemen x berhasil dimasukkan. |
} | Menutup blok fungsi enqueue(). |
void dequeue() { | Memulai fungsi untuk menghapus/mengeluarkan elemen dari antrean terdepan. |
if(isEmpty()) { | Mengecek kondisi: Jika antrean kosong, maka... |
cout << "Queue Underflow\n"; | ...cetak pesan "Queue Underflow" (Tidak ada data yang bisa dikeluarkan). |
return; | Keluar dari fungsi dequeue. |
} | Menutup blok if(isEmpty()). |
cout << "Elemen " << arr[front] << " keluar ke Queue\n"; | Mencetak informasi nilai elemen yang ada di indeks front (elemen yang akan dihapus). |
if(front == rear) { | Mengecek kondisi: Jika front sama dengan rear (artinya hanya tersisa 1 elemen di antrean), maka... |
front = rear = -1; | ...kembalikan status antrean menjadi kosong sepenuhnya dengan mereset front dan rear ke -1. |
} else { | Jika elemen di antrean lebih dari satu, maka... |
front++; | ...geser front mundur satu langkah (ditambah 1) untuk menunjuk ke orang/elemen berikutnya. |
} | Menutup blok if-else. |
} | Menutup blok fungsi dequeue(). |
void display() { | Memulai fungsi untuk mencetak seluruh isi antrean saat ini. |
if(isEmpty()) { | Mengecek kondisi: Jika antrean kosong, maka... |
cout << "Queue kosong\n"; | ...cetak pesan "Queue kosong". |
return; | Keluar dari fungsi display. |
} | Menutup blok if(isEmpty()). |
cout << "Isi Queue: "; | Mencetak teks awalan "Isi Queue: ". |
int i; | Mendeklarasikan variabel i untuk digunakan dalam perulangan (loop). |
for(i = front; i <= rear; i++) { | Memulai perulangan dari indeks front (terdepan) hingga indeks rear (paling belakang). |
cout << arr[i] << " "; | Mencetak elemen array pada indeks ke-i diikuti dengan spasi. |
} | Menutup blok perulangan for. |
cout << endl; | Pindah ke baris baru (enter) setelah semua elemen dicetak. |
} | Menutup blok fungsi display(). |
}; | Menutup definisi class Queue. Tanda titik koma (;) di sini wajib ada. |
int main(void) { | Memulai fungsi utama, titik awal program berjalan. |
Queue q; | Membuat sebuah objek instansiasi dari class Queue dengan nama variabel q. |
q.enqueue(10); | Memanggil fungsi enqueue pada objek q untuk memasukkan angka 10. |
q.enqueue(20); | Memanggil fungsi enqueue pada objek q untuk memasukkan angka 20. |
q.enqueue(30); | Memanggil fungsi enqueue pada objek q untuk memasukkan angka 30. |
q.display(); | Memanggil fungsi display untuk menampilkan isi antrean (Hasil: 10 20 30). |
q.dequeue(); | Memanggil fungsi dequeue untuk menghapus elemen terdepan (10 dihapus). |
q.display(); | Memanggil fungsi display lagi untuk menampilkan isi antrean terbaru (Hasil: 20 30). |
return 0; | Mengembalikan nilai 0 ke sistem operasi, menandakan program selesai tanpa error. |
} | Menutup fungsi main(). |
2. Implementasi Queue pada Linked List
Deskripsi (Fungsi) Program:
Program ini merupakan implementasi struktur data Queue (antrean) di C++ menggunakan Linked List (senarai berantai), yang memungkinkan ukuran antrean bertambah dan berkurang secara dinamis tanpa batas kapasitas (selama memori komputer masih tersedia).
Code:
Hasil/Output Program:
Penjelasan Program:
Baris Kode
Penjelasan
// implementasi Queue pada Link Listed...
Komentar penjelasan kode.
#include <bits/stdc++.h>
Mengimpor seluruh library standar C++.
using namespace std;
Mengizinkan penggunaan fungsi standar tanpa awalan std::.
struct Node {
Membuat struktur data khusus bernama Node. Ini adalah cetakan untuk membuat "gerbong" antrean.
int data;
Bagian dari Node untuk menyimpan nilai/informasi (berupa angka integer).
Node* next;
Bagian dari Node berupa pointer untuk menunjuk/menyambung ke gerbong (Node) berikutnya.
};
Menutup definisi struct Node.
class Queue {
Memulai definisi class Queue sebagai pengelola antrean.
private:
Variabel di bawah ini hanya bisa diakses oleh class ini sendiri.
Node *front, *rear;
Membuat dua pointer bertipe Node. front menunjuk ke gerbong pertama, rear ke gerbong terakhir.
public:
Fungsi di bawah ini bisa dipanggil dari luar (seperti dari main()).
Queue() {
Constructor yang berjalan otomatis saat antrean baru dibuat.
front = rear = NULL;
Mengatur front dan rear menjadi NULL (kosong), menandakan antrean belum memiliki gerbong sama sekali.
bool isEmpty() {
Fungsi untuk mengecek apakah antrean kosong.
return (front == NULL);
Mengembalikan true jika front adalah NULL (tidak menunjuk gerbong apa pun).
void enqueue(int x) {
Fungsi untuk menambahkan data baru ke antrean.
Node* newNode = new Node();
Menciptakan "gerbong" baru secara dinamis di memori dan menunjuknya dengan newNode.
newNode->data = x;
Memasukkan nilai x ke dalam bagian data di gerbong baru tersebut.
newNode->next = NULL;
Memastikan gerbong baru ini tidak menunjuk ke mana-mana dulu (NULL).
if(rear == NULL) {
Mengecek apakah antrean saat ini benar-benar kosong.
front = rear = newNode;
Jika kosong, gerbong baru ini langsung menjadi yang terdepan (front) sekaligus paling belakang (rear).
} else {
Jika antrean sudah memiliki isi sebelumnya...
rear->next = newNode;
...sambungkan gerbong yang paling belakang saat ini (rear) ke newNode.
rear = newNode;
Pindahkan status/pointer rear agar menunjuk ke newNode (karena ia sekarang yang paling belakang).
void dequeue() {
Fungsi untuk menghapus antrean terdepan.
if(isEmpty()) { ... return; }
Mengecek jika kosong, cetak "Queue kosong" dan batalkan penghapusan.
Node* temp = front;
Membuat pointer sementara (temp) yang menunjuk ke gerbong terdepan (gerbong yang akan dihapus).
cout << "Elemen " << ...
Mencetak data dari gerbong yang akan dihapus.
front = front->next;
Memindahkan pointer front ke gerbong urutan kedua. (Orang kedua sekarang maju jadi orang pertama).
if(front == NULL) {
Mengecek apakah setelah digeser, front menjadi NULL (artinya gerbong tadi adalah satu-satunya gerbong di antrean).
rear = NULL;
Jika antrean jadi kosong melompong, pointer rear juga harus di-reset ke NULL.
delete temp;
Menghancurkan memori bekas gerbong pertama tadi agar tidak terjadi memory leak (kebocoran memori).
void display() {
Fungsi untuk mencetak isi antrean.
if(isEmpty()) { ... return; }
Mengecek jika kosong, hentikan proses pencetakan.
Node* temp = front;
Membuat pointer pembaca (temp) dan menaruhnya di posisi paling depan (front).
while(temp != NULL) {
Selama pointer temp sedang menunjuk sebuah gerbong (bukan NULL / belum sampai ujung)...
cout << temp->data << " ";
...cetak data di gerbong tersebut.
temp = temp->next;
Geser pointer temp ke gerbong selanjutnya.
}
Menutup perulangan while.
int main(void) { ... }
Fungsi utama. Logikanya persis seperti versi array: membuat objek antrean, memasukkan (5, 15, 25), mencetak, menghapus satu, dan mencetak lagi.
Baris Kode | Penjelasan |
// implementasi Queue pada Link Listed... | Komentar penjelasan kode. |
#include <bits/stdc++.h> | Mengimpor seluruh library standar C++. |
using namespace std; | Mengizinkan penggunaan fungsi standar tanpa awalan std::. |
struct Node { | Membuat struktur data khusus bernama Node. Ini adalah cetakan untuk membuat "gerbong" antrean. |
int data; | Bagian dari Node untuk menyimpan nilai/informasi (berupa angka integer). |
Node* next; | Bagian dari Node berupa pointer untuk menunjuk/menyambung ke gerbong (Node) berikutnya. |
}; | Menutup definisi struct Node. |
class Queue { | Memulai definisi class Queue sebagai pengelola antrean. |
private: | Variabel di bawah ini hanya bisa diakses oleh class ini sendiri. |
Node *front, *rear; | Membuat dua pointer bertipe Node. front menunjuk ke gerbong pertama, rear ke gerbong terakhir. |
public: | Fungsi di bawah ini bisa dipanggil dari luar (seperti dari main()). |
Queue() { | Constructor yang berjalan otomatis saat antrean baru dibuat. |
front = rear = NULL; | Mengatur front dan rear menjadi NULL (kosong), menandakan antrean belum memiliki gerbong sama sekali. |
bool isEmpty() { | Fungsi untuk mengecek apakah antrean kosong. |
return (front == NULL); | Mengembalikan true jika front adalah NULL (tidak menunjuk gerbong apa pun). |
void enqueue(int x) { | Fungsi untuk menambahkan data baru ke antrean. |
Node* newNode = new Node(); | Menciptakan "gerbong" baru secara dinamis di memori dan menunjuknya dengan newNode. |
newNode->data = x; | Memasukkan nilai x ke dalam bagian data di gerbong baru tersebut. |
newNode->next = NULL; | Memastikan gerbong baru ini tidak menunjuk ke mana-mana dulu (NULL). |
if(rear == NULL) { | Mengecek apakah antrean saat ini benar-benar kosong. |
front = rear = newNode; | Jika kosong, gerbong baru ini langsung menjadi yang terdepan (front) sekaligus paling belakang (rear). |
} else { | Jika antrean sudah memiliki isi sebelumnya... |
rear->next = newNode; | ...sambungkan gerbong yang paling belakang saat ini (rear) ke newNode. |
rear = newNode; | Pindahkan status/pointer rear agar menunjuk ke newNode (karena ia sekarang yang paling belakang). |
void dequeue() { | Fungsi untuk menghapus antrean terdepan. |
if(isEmpty()) { ... return; } | Mengecek jika kosong, cetak "Queue kosong" dan batalkan penghapusan. |
Node* temp = front; | Membuat pointer sementara (temp) yang menunjuk ke gerbong terdepan (gerbong yang akan dihapus). |
cout << "Elemen " << ... | Mencetak data dari gerbong yang akan dihapus. |
front = front->next; | Memindahkan pointer front ke gerbong urutan kedua. (Orang kedua sekarang maju jadi orang pertama). |
if(front == NULL) { | Mengecek apakah setelah digeser, front menjadi NULL (artinya gerbong tadi adalah satu-satunya gerbong di antrean). |
rear = NULL; | Jika antrean jadi kosong melompong, pointer rear juga harus di-reset ke NULL. |
delete temp; | Menghancurkan memori bekas gerbong pertama tadi agar tidak terjadi memory leak (kebocoran memori). |
void display() { | Fungsi untuk mencetak isi antrean. |
if(isEmpty()) { ... return; } | Mengecek jika kosong, hentikan proses pencetakan. |
Node* temp = front; | Membuat pointer pembaca (temp) dan menaruhnya di posisi paling depan (front). |
while(temp != NULL) { | Selama pointer temp sedang menunjuk sebuah gerbong (bukan NULL / belum sampai ujung)... |
cout << temp->data << " "; | ...cetak data di gerbong tersebut. |
temp = temp->next; | Geser pointer temp ke gerbong selanjutnya. |
} | Menutup perulangan while. |
int main(void) { ... } | Fungsi utama. Logikanya persis seperti versi array: membuat objek antrean, memasukkan (5, 15, 25), mencetak, menghapus satu, dan mencetak lagi. |
- Dapatkan link
- X
- Aplikasi Lainnya
Komentar
Posting Komentar