Apa itu Stack?
Stack adalah struktur data yang mengikuti prinsip Last-In-First-Out (LIFO). Dengan kata lain, elemen terakhir yang ditambahkan ke dalam stack akan menjadi yang pertama dihapus.
Apa itu Queue?
Queue adalah struktur data yang mengikuti prinsip First-In-First-Out (FIFO). Dengan kata lain, elemen pertama yang ditambahkan ke dalam queue akan menjadi yang pertama dihapus.
Notes
Stack
- Stack adalah struktur data yang mengikuti prinsip Last-In-First-Out (LIFO).
- Elemen terakhir yang ditambahkan ke dalam stack akan menjadi yang pertama dihapus.
- Stack dapat diimplementasikan menggunakan array atau linked list.
Queue
- Queue adalah struktur data yang mengikuti prinsip First-In-First-Out (FIFO).
- Elemen pertama yang ditambahkan ke dalam queue akan menjadi yang pertama dihapus.
- Queue dapat diimplementasikan menggunakan array atau linked list.
Ilustrasi
Stack Illustration
Berikut adalah contoh stack tumpukan buku yang berurutan dari 1 sampai 3, kita bisa lihat bahwa buku ke-3 ada di paling atas karena kita menaruh elemen di atas tumpukan,
Jika kita ingin menaruh elemen baru seperti buku ke-4 pada gambar,
Maka kita akan mendapatkan hasil stack sebagai berikut,
Lalu, kita akan membuang sebuah buku dari stack, maka kita harus membuang dari tempat teratas, tidak bisa dari bawah,
Hasil akhir ini memperlihatkan bahwa stack mempunyai prinsip Last-In-First-Out (LIFO), seperti pada tumpukan buku di dunia nyata.
Queue Illustration
Berikut contoh queue dari urutan 1 sampai 3, kita bisa melihat perbedaan dari stack dimana elemen nomor 1 berada di paling depan,
Elemen ke-4 akan menjadi elemen paling terakhir di antrian,
Jika kita menghapus elemen dari queue maka kita akan melihat urutan, yang paling awal masuk adalah yang paling pertama keluar, seperti antrian pada dunia nyata.
Hasil akhir dari queue adalah seperti ini, berbeda dari stack.
Implementasi
Stack Code
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
int stack[MAX_SIZE];
int top = -1;
// Fungsi untuk memeriksa apakah stack kosong
int is_empty() {
return top == -1;
}
// Fungsi untuk memeriksa apakah stack penuh
int is_full() {
return top == MAX_SIZE - 1;
}
// Fungsi untuk menambahkan elemen ke dalam stack
void push(int value) {
if (is_full()) {
printf("Stack overflow!\n");
return;
}
stack[++top] = value;
}
// Fungsi untuk menghapus elemen dari stack
int pop() {
if (is_empty()) {
printf("Stack underflow!\n");
return -1;
}
return stack[top--];
}
// Fungsi untuk menampilkan isi dari stack
void display() {
int i;
if (is_empty()) {
printf("Stack is empty!\n");
return;
}
for (i = top; i >= 0; i--) {
printf("%d\n", stack[i]);
}
}
int main() {
push(10);
push(20);
push(30);
printf("Is the stack full? %d\n", is_full());
printf("Stack elements:\n");
display();
printf("Popped element: %d\n", pop());
printf("Stack elements:\n");
display();
printf("Is the stack empty? %d\n", is_empty());
return 0;
}
Output
Is the stack full? 0
Stack elements:
30
20
10
Popped element: 30
Stack elements:
20
10
Is the stack empty? 0
Queue Code
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
int queue[MAX_SIZE];
int front = -1, rear = -1;
// Fungsi untuk memeriksa apakah queue kosong
int is_empty() {
return front == -1;
}
// Fungsi untuk memeriksa apakah queue penuh
int is_full() {
return (front == 0 && rear == MAX_SIZE - 1) || (front == rear + 1);
}
// Fungsi untuk menambahkan elemen ke dalam queue
void enqueue(int value) {
if (is_full()) {
printf("Queue overflow!\n");
return;
}
if (front == -1) {
front = rear = 0;
} else if (rear == MAX_SIZE - 1) {
rear = 0;
} else {
rear++;
}
queue[rear] = value;
}
// Fungsi untuk menghapus elemen dari queue
int dequeue() {
if (is_empty()) {
printf("Queue underflow!\n");
return -1;
}
int value = queue[front];
if (front == rear) {
front = rear = -1;
} else if (front == MAX_SIZE - 1) {
front = 0;
} else {
front++;
}
return value;
}
// Fungsi untuk menampilkan isi dari queue
void display() {
int i;
if (is_empty()) {
printf("Queue is empty!\n");
return;
}
if (front <= rear) {
for (i = front; i <= rear; i++) {
printf("%d\n", queue[i]);
}
} else {
for (i = front; i <= MAX_SIZE - 1; i++) {
printf("%d\n", queue[i]);
}
for (i = 0; i <= rear; i++) {
printf("%d\n", queue[i]);
}
}
}
int main() {
enqueue(10);
enqueue(20);
enqueue(30);
printf("Is the queue full? %d\n", is_full());
printf("Queue elements:\n");
display();
printf("Dequeued element: %d\n", dequeue());
printf("Queue elements:\n");
display();
printf("Is the queue empty? %d\n", is_empty());
return 0;
}
Output
Is the queue full? 0
Queue elements:
10
20
30
Dequeued element: 10
Queue elements:
20
30
Is the queue empty? 0