Professional Documents
Culture Documents
ASD 4 Stack (Tumpukan) Dan Queue (Antrian)
ASD 4 Stack (Tumpukan) Dan Queue (Antrian)
ASD 4 Stack (Tumpukan) Dan Queue (Antrian)
Queue (Antrian)
ADI NUGROHO
STRUKTUR DATA STACK:
LIFO (LAST IN FIRST OUT)
Pemanfaatan Struktur Data Stack
Pemanfaatan Stack :
Perhitungan ekspresi aritmatika (posfix)
Algoritma backtraking (runut balik)
Algoritma rekursif (recursive programming)
Operasi Dasar Stack
Pembuatan/Create Stack
Pop Mengambil Elemen Data Dari Stack
Push Memasukkan Elemen Data ke Stack
Main Program
#include <stdio.h>
#include <stdlib.h>
#include <limits.h> // For INT_MIN
#define SIZE 100
// Create a stack with capacity of 100 elements
int stack[SIZE];
// Initially stack is empty
int top = -1;
/* Function declaration to perform push and pop on stack */
void push(int element);
int pop();
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");
}
return (0)
Operasi Push
(Menambahkan Elemen Data Pada Stack)
#include <stdlib.h>
#include <limits.h>
// Queue capacity
int queue[CAPACITY];
int dequeue();
int isFull();
int isEmpty();
int getRear();
int getFront();
/* Driver function */
int main()
while (1)
/* Queue menu */
printf("--------------------------------------\n");
printf("--------------------------------------\n");
printf("1. Enqueue\n");
printf("2. Dequeue\n");
printf("3. Size\n");
printf("0. Exit\n");
printf("--------------------------------------\n");
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");
}
}
Fungsi Enqueue
(Menambahkan Elemen Data ke Antrian)
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;
}
Fungsi Dequeue
(Menghapus Elemen Data dari Antrian)
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;
}
Fungsi-fungsi Bantu: isFull(), isEmpty, getFront(), getRear()
int isFull()
int isEmpty()
int getFront()
return (isEmpty())
? INT_MIN
: queue[front];
int getRear()
return (isEmpty())
? INT_MIN : queue[rear];
}
Tugas Makalah Stack dan Queue
Implementasikan Stack menggunakan Senarai Berkait Tunggal (Singly Linked List)
untuk struct Mahasiswa (NIM, Nama, IPK).
Sifat-sifat Senarai, Sifat-sifat Stack, Operasi Create, Pop, Push
Cetak isi Stack
Implementasikan Queue menggunakan Senarai Berkait Ganda (Doubly Linked List)
untuk struct Mahasiswa (NIM, Nama, IPK).
Sifat-sifat Senarai, sifat-sifat Queue.
Operasi Create, Enqueue, Dequeue
Cetak isi Queue
Beri komentar-komentar penjelasan pada setiap baris kode program yang Anda tuliskan.
Kumpul di aad.nugroho1965@gmail.com tanggal 21 April 2021