Stack dan Queue

 

Stack dan Queue

A. Stack

Stack adalah struktur data yang mengikuti prinsip LIFO (Last In First Out), yang berarti elemen yang dimasukkan terakhir akan dikeluarkan terlebih dahulu. Ilustrasinya dapat dilihat sebagai berikut :

Gambar Prinsip LIFO (Last In First Out)

 

Berikut adalah contoh program stack :

#include <iostream>
#define MAX 10
using namespace std;
  
struct Stack {
  int top, data[MAX];
} Tumpukan;
  
void init() {
  Tumpukan.top = -1;
}
  
bool isEmpty() {
  return Tumpukan.top == -1;
}
  
bool isFull() {
  return Tumpukan.top == MAX - 1;
}
  
void push() {
  if (isFull()) {
    cout << "\nTumpukan penuh" << endl;
  } else {
    Tumpukan.top++;
    cout << "\nMasukkan data = ";
    cin >> Tumpukan.data[Tumpukan.top];
    cout << "Data " << Tumpukan.data[Tumpukan.top] << " masuk ke stack"
    << endl;
  }
}
  
void pop() {
  if (isEmpty()) {
    cout << "\nData kosong\n" << endl;
  } else {
    cout << "\nData " << Tumpukan.data[Tumpukan.top] << " sudah terambil"
    << endl;
    Tumpukan.top--;
  }
}
  
void printStack() {
  if (isEmpty()) {
    cout << "Tumpukan kosong";
  } else {
    cout << "\nTumpukan : ";
    for (int i = Tumpukan.top; i >= 0; i--)
      cout << Tumpukan.data[i] << ((i == 0) ? "" : ",");
  }
}
  
int main() {
  int pilihan, data;
  init();
  do {
    printStack();
    cout << "\n1. Input (Push)\n"
    << "2. Hapus (Pop)\n"
    << "3. Keluar\n"
    << "Masukkan Pilihan: ";
    cin >> pilihan;
    switch (pilihan) {
    case 1:
      push();
      break;
    case 2:
      pop();
      break;
    default:
      cout << "Pilihan tidak tersedia" << endl;
      break;
    }
  } while (pilihan != 3);
}

Outputnya :

Gambar Hasil Program Stack

 

B. Queue

Queue adalah struktur data yang mengikuti prinsip FIFO (First In First Out), yang berarti elemen yang dimasukkan pertama akan dikeluarkan terlebih dahulu. Ilustrasinya dapat dilihat sebagai berikut :

Gambar Prinsip FIFO (First In First Out)

 

Berikut adalah contoh program queue:

#include <iostream>
#define MAX 20 //maksimum data queue
using namespace std;
 
//Deklarasi struct antrian
struct Queue {
    int front, rear, data[MAX];
}Q;
 
//cek apakah antrian penuh
bool isFull() {
    return Q.rear == MAX;
}
 
//cek apakah antrian kosong
bool isEmpty() {
    return Q.rear == 0;
}
 
//Menampilkan Queue
void printQueue() {
    if (isEmpty()) {
    cout << "Antrian kosong"<<endl;
    }
    else {
        cout << "QUEUE : ";
        for (int i = Q.front; i < Q.rear; i++)
        //menambahkan koma jika data tidak terdapat di antrian pertama
            cout << Q.data[i] << ((Q.rear-1 == i) ? "" : ",");
        cout << endl;
  }
}
 
//manambahkan data ke antrian
void enqueue() {
    if (isFull())
    {
        cout << "Antrian penuh!"<<endl;
    }
    else {
        int data;
        //menambahkan data ke antrian
        cout << "Masukkan Data : ";cin >> data;
        Q.data[Q.rear] = data;
        //menempatkan tail pada elemen data terakhir yang ditambahkan
        Q.rear++;
        cout << "Data ditambahkan\n";
        printQueue();
    }
}
 
// mengambil data dari antrian
void dequeue() {
    if (isEmpty())
    {
        cout << "Antrian masih kosong"<<endl;
    }
    else{
        cout << "Mengambil data \"" << Q.data[Q.front] << "\"..." << endl;
        //menggeser antrian data ke head
        for (int i = Q.front; i < Q.rear; i++)
            Q.data[i] = Q.data[i + 1];
        //menempatkan tail pada data terakhir yang digeser
        Q.rear--;
        printQueue();
    }
}
 
int main() {
    int choose;
    do
    {
        //Tampilan menu
        cout << "-------------------\n"
            << "   Menu Pilihan\n"
            << "-------------------\n"
            << " [1] Enqueue \n"
            << " [2] Dequeue\n"
            << " [3] Keluar \n\n"
            << "-------------------\n"
            << "Masukkan pilihan : "; cin >> choose;
        switch (choose)
        {
        case 1:
            enqueue();
            break;
        case 2:
            dequeue();
            break;
        default:
            cout << "Pilihan tidak tersedia";
            break;
        }
    } while (choose !=3);
    return 0;
}

Output :

Gambar Hasil Queue

 


Subscribe to receive free email updates:

0 Response to "Stack dan Queue"

Post a Comment