`
MAKALAH
Mengimplementasikan Stack & Queue
Disusun untuk memenuhi tugas matakuliah Algoritma dan Struktur Data I
Dosen Pengampu : DR. Adi Nugroho, ST, MMSI
Disusun Oleh :
Jefferson J.H. Saluling (672019270)
Program Studi S1 Teknik Informatika
Fakultas Teknologi Informasi
Universitas Kristen Satya Wacana
`
Kata Pengantar
Puji syukur penulis memberikannya kepada Tuhan Yang Maha Esa karena dengan
berkah dan rahmat-Nya penulis dapat menyelesaikan makalah ini. Makalah ini disiapkan
dalam rangka memenuhi tugas mata kuliah Jaringan Komputer.
Makalah ini berjudul “Implementasi Stack dan Queue” berisi tentang inti kode bahasa
c, inventor, cara kerja, implementasi, kelebihan dan kekurangan Stack dan Queue. Makalah
ini memberikan pengalaman berharga bagi penulis. Banyak kendala yang penulis lalui selama
penulisan skripsi ini, namun berkat bantuan berbagai pihak kendala tersebut dapat diatasi.
Penulis mengucapkan terima kasih.
Penulis menyadari bahwa tanpa bantuannya, makalah ini tidak akan mungkin
terlaksana. Kertas itu jauh dari sempurna. Oleh karena itu, penulis mohon maaf jika dalam
penulisan skripsi ini terdapat hal-hal yang kurang berkenan di hati pembaca. Semoga artikel
ini bermanfaat bagi siapa saja yang membacanya.
Manado, 20 Maret 2021
Jefferson J.H. Saluling
`
DAFTAR ISI
Kata Pengantar..................................................................................................1
Daftar isi.............................................................................................................2
BAB I PENDAHULUAN.................................................................................3
1.1 Latar Belakang.................................................................................3
1.2 Rumusan Masalah..............................................................................3
1.3 Tujuan Makalah..................................................................................3
BAB II PEMBAHASAN................................................................................. 4
2.1 Pengertian Stack & Queue .................................................................4
2.2 Operasi Stack & Queue....................................................................6
2.3 Fungsi Stack & Queue.....................................................................7
2.4 Implementasi Staack & Queue...........................................................10
BAB III PENUTUP...............................................................................................21
3.1 Kesimpulan.......................................................................................21
Daftar Pustaka........................................................................................................22
`
BAB I
PENDAHULUAN
1.1 Latar Belakang
Dalam kehidupan sehari-hari kita pasti pernah menjumpai atau melakukan yang nama
antrian, misal saat mengantri di loket kereta, di teller bank, di rumah sakit, dll. Kita pasti
melakukan yang namanya antrian. Oleh karena itu di sini akan dibahas tentang antrian di
pemrograman java yang tujuannya memudahkan dan membantu kita pada kehidupan sehari-
hari.
1.2 Rumusan Masalah
Dari uraian latar belakang di atas dapat ditarik rumusan masalah yaitu :
1. Apakah Stack & Queue itu?
2. Apakah pengoperasian Stack & Queue?
3. Apakah fungsi Stack & Queue itu?
1.3 Tujuan Makalah
Tujuan dari pembuatan makalah ini adalah :
1. Memahami pengertian Stack & Queue
2. Memahami cara pengoperasian Stack & Queue
3. Memahami fungsi Stack & Queue
`
BAB II
PEMBAHASAN
2.1 Pengertian Stack & Queue
Stack
stack adalah salah satu struktur data yang digunakan untuk menyimpan sekumpulan objek
ataupun variabel. Sesuai namanya yaitu stack, tidak heran apabila objek yang terkumpul
terlihat seperti tumpukan. Karakteristik stack sendiri bersifat LIFO (last in first out). Artinya,
data yang terakhir masuk merupakan data yang akan keluar terlebih dahulu. Seperti halnya
tumpukan pada umumnya, misalnya tumpukan buku, yang di atas atau yang terakhir masuk
harus dikeluarkan terlebih dahulu untuk mendapatkan buku yang berada di tumpukan bawah.
Sebagai contoh, kamu mempunyai empat buku, yaitu buku matematika, fisika, biologi, dan
kimia. Buku matematika kamu masukkan terlebih dahulu, lalu buku selanjutnya fisika,
biologi, dan kimia. Untuk mendapatkan buku fisika, kamu harus mengeluarkan buku kimia
dan biologi terlebih dahulu, karena kedua buku tersebut tergolong buku yang terakhir masuk.
Analogi di atas seperti halnya stack yang memiliki sifat LIFO. Data terakhir yang masuk
harus keluar terlebih dahulu. Seperti yang sudah disebutkan sebelumnya, konsep ini pada
umumnya digunakan dalam pemrograman dan mengorganisir penyimpanan komputer.
Kelebihan dan Kekurangan Menggunakan Stack
Di balik pengertiannya yang terlihat cukup menguntungkan bagi programmer, sebenarnya
stack menyimpan beberapa kekurangan yang harus kamu ketahui.
Berikut kelebihan dan kekurangan dari stack,
1. Kelebihan
membantu mengelola data dengan metode LIFO
secara otomatis membersihkan objek
tidak mudah rusak
ukuran variabel tidak dapat diubah
mengontrol memori secara mandiri
2. Kekurangan
`
memori stack sangat terbatas
ada kemungkinan stack akan meluap atau overflow jika terlalu banyak objek
tidak memungkinkan akses acak, karena harus mengeluarkan tumpukan paling atas terlebih
dahulu untuk mengakses tumpukan paling bawah
Queue
Secara harfiah queue dapat diartikan sebagai antrian. Queue merupakan kumpulan data
dengan penambahan data hanya melalui satu sisi, yaitu belakang (tail) dan penghapusan data
hanya melalui sisi depan (head). Berbeda dengan stack yang bersifat LIFO (Last In First Out)
maka queue bersifat FIFO (First In First Out), yaitu data yang pertama masuk akan keluar
terlebih dahulu dan data yang terakhir masuk akan keluar terakhir. Berikut ini adalah
gambaran struktur data queue.
Elemen yang pertama kali masuk ke dalam queue disebut elemen depan (front/head of
queue), sedangkan elemen yang terakhir kali masuk ke queue disebut elemen belakang
(rear/tail of queue). Perbedaan antara stack dan queue terdapat pada aturan penambahan dan
penghapusan elemen. Pada stack, operasi penambahan dan penghapusan elemen dilakukan di
satu ujung. Elemen yang terakhir kali dimasukkan akan berada paling dekat dengan ujung
atau dianggap paling atas sehingga pada operasi penghapusan, elemen teratas tersebut akan
dihapus paling awal, sifat demikian dikenal dengan LIFO. Pada queue, operasi tersebut
dilakukan di tempat yang berbeda. Penambahan elemen selalu dilakukan melalui salah satu
ujung, menempati posisi di belakang elemen-elemen yang sudah masuk sebelumnya atau
menjadi elemen paling belakang. Sedangkan penghapusan elemen dilakukan di ujung yang
berbeda, yaitu pada posisi elemen yang masuk paling awal atau elemen terdepan. Sifat yang
demikian dikenal dengan FIFO.
Operasi‐operasi standar pada queue adalah:
1. Membuat queue atau inisialisasi.
2. Mengecek apakah queue penuh.
3. Mengecek apakah queue kosong.
4. Memasukkan elemen ke dalam queue atau InQueue (Insert Queue).
5. Menghapus elemen queue atau DeQueue (Delete Queue).
`
2.2 Operasi Stack & Queue
Stack
Jenis-jenis Operasi Stack
1. Pop
2. Push
3. isFull
4. isEmpty
5. Peek
Queue
Jenis-jenis Operasi Queue
1. Create Queue (Q), atau constructor menciptakan antrian kosong Q.
2. Add Queue (Q, X) memasukkan elemen X sebagai elemen akhir di Q.
3. Remove Queue (Q, X)atau mengambil elemen depan di antrian Q ke elemenX.
Operasi - operasi pengaksesan tambahan yang dapat dilakukan adalah :
1. Head Queue (Q), atau Front (Q, X) mengirim elemen terdepan tanpa menghapus.
2. Tail Queue (Q), mengirim elemen tanpa menghapusnya.
Operasi - operasi Query tambahan yang dapat dilakukan adalah :
1. Is Empty Queue (Q), mengirim apakah antrian Q adalah kosong.
2. Is Full Queue (Q), mengirim apakah antrian Q adalah penuh bila kapasitas antrian Q
didefinisikan.
3. Is Overflow Queue (Q), mengirim apakah antrian Q telah mengalami overflow.
4. Is Underflow Queue (Q), mengirim apakah antrian Q mengalami underflow.
Operasi - operasi terhadap seluruh antrian Q antara lain adalah :
1. Size Queue (Q), mengetahui jumlah elemen di antrian Q.
2. Is Equal Queue (Q1, Q2), mengirim apakah antrian Q1 dan Q2 sama isinya.
Jumlah operasi pokok Queue tidak banyak. Dengan demikian, sangat sederhana untuk
menyatakan apa pun mengenai implementasinya.
`
2.3 Fungsi Stack & Queue
Stack
Fungsi Pop
Pop pada stack adalah operasi yang berfokus pada penghapusan elemen.
Dikarenakan dalam stack programmer hanya memiliki akses pada bagian atas,
hanya ada satu elemen yang dapat dihapus.
Fungsi Push
Kebalikan dari pop, operasi Push justru lebih berfokus pada memasukkan elemen
ke dalam stack atau tumpukan. Seperti halnya sistem LIFO, programmer atau
pengguna hanya dapat memasukkan elemen baru di bagian atas tumpukan.
Fungsi isFull
Operasi stack yang satu ini adalah untuk mengetahui apakah tumpukan sudah
penuh atau belum.
Fungsi isEmpty
Kebalikan dari isFull, isEmpty merupakan operasi yang digunakan untuk
memeriksa apakah tumpukan kosong atau tidak.
Fungsi Peek
Seperti namanya, dilansir dari Tutorials Point, operasi Peek atau mengintip adalah
operasi yang dilakukan untuk mengetahui data teratas dari tumpukan tanpa harus
menghapusnya.
Queue
Fungsi Create
Procedure create berguna untuk menciptakan queue yang baru dan kosong yaitu
dengan cara memberikan nilai awal (head) dan nilai akhir (tail) dengan nol (0).
Nol menunjukan bahwa queue masih kosong.
Procedure Create:
Begin
Head= 0 , Tail= 0
End:
`
Fungsi IsEmpty
Function empty berguna untuk mengecek apakah queue masih kosong atau sudah
berisi data. Hal ini dilakukan dengan mengecek apakah tail bernilai nol atau
tidak, jika ya maka kosong.
Int IsEmpty()
{
if(antrian.tail== -1)
return 1;
else
return 0;
}
Fungsi IsFull
Untuk mengecek apakah antrian sudah penuh atau belum. Dengan cara mengecek
nilai Tail, jika tail = MAX-1 berarti antrian sudah penuh (MAX-1 adalah batas
elemen array dalam program C++).
Int IsFull()
{
if(antrian.tail== Max-1)
return 1;
else
return 0;
}
Fungsi Enqueue
Memasukan data ke dalam antrian, penambahan elemen selalu ditambahkan di
elemen paling belakang. Penambahan elemen selalu menggerakan variabel Tail
dengan cara increment counter tail.
`
Fungsi Dequeue
Mengeluarkan data terdepan dari antrian, dengan cara mengurangi counter Tail
dan menggeser semua elemen antrian kedepan. Dengan cara menggeser semua
elemen antrian kedepan dan mengurangi Tail dengan 1. Penggeseran dilakukan
dengan menggunakan looping.
Fungsi Clear
Menghapus seluruh antrian, dengan cara mengeluarkan semua antrian tersebut
satu per satu hingga antrian kosong dengan memanfaatkan fungsi dequeue.
Void Clear(){
antrian.head=antrian.tail= -1;
printf (“data clear “);
}
`
2.4 Implementasi Stack & Queue
Stack
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#include <conio.h>
#include <limits.h>
int stack[100];
int SIZE=100;
int top =-1;
void push(int element);
int pop();
void empty();
int main()
int choice, data;
while(1)
/* Menu */
`
printf("------------------------------------\n");
printf(" STACK IMPLEMENTATION PROGRAM \n");
printf("------------------------------------\n");
printf("1. Push\n");
printf("2. Pop\n");
printf("3. Size\n");
printf("4. Exit\n");
printf("------------------------------------\n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch(choice) {
case 1:
printf("Enter data to push into stack: ");
scanf("%d", &data);
// Push element to stack
push(data);
break;
case 2:
data = pop();
// If stack is not empty
if (data != INT_MIN)
printf("Data => %d\n", data);
break;
case 3:
`
printf("Stack size: %d\n", top + 1);
break;
case 4:
printf("Exiting from app.\n");
exit(0);
break;
default:
printf("Invalid choice, please try again.\n");
printf("\n\n");
void push(int element)
// Check stack overflow
if (top >= SIZE)
printf("Stack Overflow, can't add more element element to stack.\n");
return;
// Increase element count in stack
top++;
`
// Push element in stack
stack[top] = element;
printf("Data pushed to stack.\n");
int pop()
// Check stack underflow
if (top < 0)
printf("Stack is empty.\n");
return INT_MIN;
// Return stack top and decrease element count in stack
return stack[top--];
Queue
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
// Queue capacity
#define CAPACITY 100
int queue[CAPACITY];
unsigned int size = 0;
`
unsigned int rear = CAPACITY - 1; // Initally assumed that rear is at end
unsigned int front = 0;
/* Function declaration for various operations on queue */
int enqueue(int data);
int dequeue();
int isFull();
int isEmpty();
int getRear();
int getFront();
/* Driver function */
int main()
int ch, data;
/* Run indefinitely until user manually terminates */
while (1)
/* Queue menu */
printf("--------------------------------------\n");
printf(" QUEUE ARRAY IMPLEMENTATION PROGRAM \n");
printf("--------------------------------------\n");
printf("1. Enqueue\n");
printf("2. Dequeue\n");
printf("3. Size\n");
`
printf("4. Get Rear\n");
printf("5. Get Front\n");
printf("0. Exit\n");
printf("--------------------------------------\n");
printf("Select an option: ");
scanf("%d", &ch);
switch (ch) {
case 1:
printf("\nEnter data to enqueue: ");
scanf("%d", &data);
// Enqueue function returns 1 on success otherwise 0
if (enqueue(data))
printf("Element added to queue.");
else
printf("Queue is full.");
break;
case 2:
data = dequeue();
// on success dequeue returns element removed otherwise returns INT_MIN
if (data == INT_MIN)
printf("Queue is empty.");
else
printf("Data => %d", data);
`
break;
case 3:
// isEmpty() function returns 1 if queue is emtpy otherwise returns 0
if (isEmpty())
printf("Queue is empty.");
else
printf("Queue size => %d", size);
break;
case 4:
if (isEmpty())
printf("Queue is empty.");
else
printf("Rear => %d", getRear());
break;
case 5:
if (isEmpty())
printf("Queue is empty.");
else
printf("Front => %d", getFront());
break;
case 0:
printf("Exiting from app.\n");
exit(0);
`
default:
printf("Invalid choice, please input number between (0-5).");
break;
printf("\n\n");
int enqueue(int data)
// Queue is full throw Queue out of capacity error.
if (isFull())
return 0;
// Ensure rear never crosses array bounds
rear = (rear + 1) % CAPACITY;
// Increment queue size
size++;
// Enqueue new element to queue
queue[rear] = data;
// Successfully enqueued element to queue
return 1;
}
`
int dequeue()
int data = INT_MIN;
// Queue is empty, throw Queue underflow error
if (isEmpty())
return INT_MIN;
// Dequeue element from queue
data = queue[front];
// Ensure front never crosses array bounds
front = (front + 1) % CAPACITY;
// Decrease queue size
size--;
return data;
int isFull()
return (size == CAPACITY);
int isEmpty()
{
`
return (size == 0);
int getFront()
return (isEmpty())
? INT_MIN
: queue[front];
int getRear()
return (isEmpty())
? INT_MIN : queue[rear];
}
`
BAB III
PENUTUP
3.1 Kesimpulan
Stack adalah suatu koleksi atau kumpulan item data yang terorganisasi dalam bentuk urutan
linier, yang operasi pemasukan dan penghapusan datanya dilakukan pada salah satu sisinya.
Pada stack, jarang sekali dilakukan traversal, karena keunikan stack justru pada operasi yang
hanya menyangkut elemen TOP. Namun dibutuhkan traversal misalnya untuk mencetak isi
stack. Pada stack, elemen yang diproses hanya elemen pada TOP.Queue merupakan
kumpulan data dengan penambahan data hanya melalui satu sisi, yaitu belakang (tail) dan
penghapusan data hanya melalui sisi depan (head). Elemen yang pertama kali masuk ke
dalam queue disebut elemen depan (front/head of queue), sedangkan elemen yang terakhir
kali masuk ke queue disebut elemen belakang (rear/tail of queue). Penambahan elemen selalu
dilakukan melalui salah satu ujung, menempati posisi di belakang elemen-elemen yang sudah
masuk sebelumnya atau menjadi elemen paling belakang. Sedangkan penghapusan elemen
dilakukan di ujung yang berbeda, yaitu pada posisi elemen yang masuk paling awal atau
elemen terdepan. Sifat yang demikian dikenal dengan FIFO (First In First Out).
`
Daftar Pustaka
Adieb, M. (2021, februari 4). Memahami Stack, Struktur Data yang Mudahkan Programmer
Jalankan Tugasnya. Retrieved from https://glints.com: https://glints.com/id/lowongan/stack-
adalah/#.YH_Q52czZPZ
AzizFS. (2018, October 18). Pengertian dan Contoh Sederhana tentang Stack dan Queue.
Retrieved from azizfirmansaputra.blogspot.com: http://17416255201077-
azizfirmansaputra.blogspot.com/2018/10/pengertian-dan-contoh-sederhana-
tentang.html
Blog, E. (2010, februari 6). Stack & Queue : Penjelasan, Deskripsi Fungsi Dasar,
Pemodelan, dan Penerapan Stack. Retrieved from kuliahinformatika.wordpress.com:
https://kuliahinformatika.wordpress.com/2010/02/06/stack-queue-penjelasan-
deskripsi-fungsi-dasar-pemodelan-dan-penerapan-stack/
HAMBALI, Y. (2019, juni 3). STRUKTUR DATA. Retrieved from sites.google.com:
https://sites.google.com/site/arrayyusuphambaliif15d1053/home
nurrahman, S. (2018, january 3). pengertian stack dan queue dalam struktur data dan
penjelasannya. Retrieved from bocahngoding.blogspot.com.
PENGERTIAN, K. (2015, November 11). Pengertian Stack Dan Queue. Retrieved from
http://www.kumpulanpengertian.com/:
http://www.kumpulanpengertian.com/2015/11/pengertian-stack-dan-queue.html