Implementasi Stack dengan C++

Implementasi Stack dengan C++

Stack adalah salah satu struktur data linear yang mengikuti prinsip LIFO (Last In, First Out). Artinya, elemen yang terakhir dimasukkan ke dalam stack adalah elemen yang pertama kali dikeluarkan.

Berikut penjelasan dan implementasi Stack di C++.

Konsep Stack

Operasi dasar yang dapat dilakukan pada stack:

  1. Push: Menambahkan elemen ke atas stack.
  2. Pop: Menghapus elemen dari atas stack.
  3. Peek/Top: Mengambil elemen di atas stack tanpa menghapusnya.
  4. IsEmpty: Memeriksa apakah stack kosong.

Implementasi Stack Menggunakan Array

Berikut adalah contoh implementasi Stack sederhana menggunakan array:

#include <iostream>
#define MAX 100 // Ukuran maksimum stack
using namespace std;

class Stack {
private:
    int arr[MAX]; // Array untuk menyimpan elemen stack
    int top;      // Menunjuk ke elemen paling atas

public:
    Stack() {
        top = -1; // Inisialisasi stack kosong
    }

    // Push: Menambahkan elemen ke stack
    void push(int value) {
        if (top >= MAX - 1) {
            cout << "Stack Overflow\n";
            return;
        }
        arr[++top] = value;
        cout << value << " pushed into stack\n";
    }

    // Pop: Menghapus elemen dari stack
    void pop() {
        if (top < 0) {
            cout << "Stack Underflow\n";
            return;
        }
        cout << arr[top--] << " popped from stack\n";
    }

    // Peek: Mengambil elemen di atas stack
    int peek() {
        if (top < 0) {
            cout << "Stack is empty\n";
            return -1;
        }
        return arr[top];
    }

    // IsEmpty: Memeriksa apakah stack kosong
    bool isEmpty() {
        return top < 0;
    }
};

int main() {
    Stack stack;

    stack.push(10);
    stack.push(20);
    stack.push(30);

    cout << "Top element is: " << stack.peek() << endl;

    stack.pop();
    stack.pop();

    if (stack.isEmpty()) {
        cout << "Stack is empty\n";
    } else {
        cout << "Stack is not empty\n";
    }

    return 0;
}

Penjelasan Kode

  1. Array arr[MAX]: Digunakan untuk menyimpan elemen stack.
  2. Variabel top: Menunjukkan indeks elemen teratas dalam stack.
  3. Metode push: Menambahkan elemen baru dan memeriksa apakah stack penuh (overflow).
  4. Metode pop: Menghapus elemen dari stack dan memeriksa apakah stack kosong (underflow).
  5. Metode peek: Mengambil elemen teratas tanpa menghapusnya.
  6. Metode isEmpty: Mengembalikan true jika stack kosong.

Implementasi Stack Menggunakan Linked List

Berikut implementasi Stack dengan Linked List untuk alokasi memori dinamis:

#include <iostream>
using namespace std;

// Node structure
struct Node {
    int data;
    Node* next;
};

// Stack class
class Stack {
private:
    Node* top; // Pointer ke elemen teratas

public:
    Stack() {
        top = nullptr; // Inisialisasi stack kosong
    }

    // Push: Menambahkan elemen ke stack
    void push(int value) {
        Node* newNode = new Node();
        newNode->data = value;
        newNode->next = top;
        top = newNode;
        cout << value << " pushed into stack\n";
    }

    // Pop: Menghapus elemen dari stack
    void pop() {
        if (top == nullptr) {
            cout << "Stack Underflow\n";
            return;
        }
        Node* temp = top;
        cout << top->data << " popped from stack\n";
        top = top->next;
        delete temp;
    }

    // Peek: Mengambil elemen di atas stack
    int peek() {
        if (top == nullptr) {
            cout << "Stack is empty\n";
            return -1;
        }
        return top->data;
    }

    // IsEmpty: Memeriksa apakah stack kosong
    bool isEmpty() {
        return top == nullptr;
    }
};

int main() {
    Stack stack;

    stack.push(10);
    stack.push(20);
    stack.push(30);

    cout << "Top element is: " << stack.peek() << endl;

    stack.pop();
    stack.pop();

    if (stack.isEmpty()) {
        cout << "Stack is empty\n";
    } else {
        cout << "Stack is not empty\n";
    }

    return 0;
}

Kelebihan dan Kekurangan

Array-Based Stack:

  • Kelebihan: Implementasi sederhana, waktu akses cepat.
  • Kekurangan: Ukuran stack tetap (statis), dapat menyebabkan overflow jika kapasitas penuh.

Linked List-Based Stack:

  • Kelebihan: Ukuran stack dinamis, tidak ada pemborosan memori.
  • Kekurangan: Membutuhkan memori tambahan untuk pointer.

Jika ada kebutuhan untuk pengembangan lebih lanjut, seperti menggunakan template untuk stack generik atau optimasi lainnya, beri tahu saya! 😊

Leave a Reply

Your email address will not be published. Required fields are marked *