Pertemuan 7 - Queue di C++

 

Queue di C++

Nama: Hadryan Rizky Dimas Saputra
NRP: 5025251027
Kelas: Struktur Data (D) 2026
Pertemuan: 7

Source Code: pertemuan_7

1. Implementasi Queue pada Array

Deskripsi (Fungsi) Program: 

Program ini merupakan implementasi struktur data Queue (antrean) menggunakan array di C++ yang beroperasi dengan prinsip First-In-First-Out (FIFO) untuk mengelola penyimpanan data linear.

Code:


Hasil/Output Program:

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().


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.

Komentar

Postingan populer dari blog ini

Pertemuan 12 - BTree & BST

Pertemuan 11 - Studi Kasus 1 | Sistem Folder Komputer (General Tree)