ASD 4 Stack (Tumpukan) Dan Queue (Antrian)

You might also like

Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 19

Stack (Tumpukan) dan

Queue (Antrian)

Implementasi Dengan Array

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)

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");
}
Operasi Pop
(Menghapus Elemen Data dari Stack)
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--];
}
Struktur Data Queue (Antrian):
FIFO (FIRST IN FIRST OUT)

Contoh : Antrian di Bank, di pusat-pusat Layanan Kesehatan, dan


sebagainya.
Operasi Dasar di Queue

 Pembuatan/Create Queue (Antrian)


 Enqueue (Insertion/Penambahan Elemen pada
Antrian)
 Dequeue (Deletion/Penghapusan Elemen dari
Antrian)
 Fungsi-fungsi Bantu: isFull(), isEmpty, getFront(),
getRear()
Fungsi main()
#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");
}
}
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()

return (size == CAPACITY);

int isEmpty()

return (size == 0);

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

You might also like