Stack Di Informatika: Pengertian, Konsep, Dan Implementasi

by Alex Braham 59 views

Hey guys! Pernah denger istilah stack dalam dunia informatika? Nah, kali ini kita bakal bahas tuntas tentang apa itu stack, kenapa penting, dan gimana cara implementasinya. Yuk, simak baik-baik!

Apa Itu Stack?

Dalam dunia informatika, stack adalah struktur data linier yang mengikuti prinsip LIFO (Last In, First Out). Maksudnya gimana tuh? Gampangnya gini, bayangin tumpukan piring di restoran. Piring yang terakhir ditaruh di atas tumpukan, pasti jadi piring pertama yang diambil kan? Nah, konsep ini persis sama dengan cara kerja stack.

Konsep Dasar Stack

Stack memiliki dua operasi dasar, yaitu:

  1. Push: Menambahkan elemen baru ke bagian atas stack.
  2. Pop: Menghapus elemen teratas dari stack.

Selain dua operasi dasar ini, ada juga beberapa operasi tambahan yang sering digunakan, seperti:

  • Peek atau Top: Melihat elemen teratas tanpa menghapusnya.
  • isEmpty: Memeriksa apakah stack kosong.
  • isFull: Memeriksa apakah stack sudah penuh (dalam implementasi menggunakan array).

Ilustrasi Cara Kerja Stack

Biar lebih kebayang, kita ilustrasikan dengan contoh. Misalkan kita punya stack kosong. Lalu, kita lakukan operasi push dengan urutan sebagai berikut:

  1. push(10): Stack sekarang berisi [10]
  2. push(20): Stack sekarang berisi [10, 20] (20 di atas 10)
  3. push(30): Stack sekarang berisi [10, 20, 30] (30 di atas 20)

Nah, kalau kita lakukan operasi pop, elemen yang akan dihapus adalah 30, karena dia adalah elemen yang terakhir dimasukkan (LIFO). Setelah pop, stack akan kembali menjadi [10, 20].

Kenapa Stack Penting?

Mungkin ada yang bertanya-tanya, kenapa sih kita perlu belajar tentang stack? Apa pentingnya dalam dunia informatika? Jawabannya, stack punya banyak sekali kegunaan, di antaranya:

  • Manajemen Memori: Stack digunakan untuk mengelola memori dalam pemanggilan fungsi (function calls). Setiap kali sebuah fungsi dipanggil, informasi tentang fungsi tersebut (seperti alamat kembali dan parameter) disimpan di stack.
  • Evaluasi Ekspresi: Stack digunakan untuk mengevaluasi ekspresi matematika, terutama ekspresi dalam notasi postfix (RPN – Reverse Polish Notation).
  • Algoritma Backtracking: Stack sangat berguna dalam implementasi algoritma backtracking, seperti pencarian solusi dalam labirin atau masalah N-Queens.
  • Undo/Redo: Fitur undo/redo yang sering kita temui di aplikasi-aplikasi juga menggunakan konsep stack. Setiap aksi disimpan di stack, sehingga kita bisa membatalkan (undo) atau mengulang (redo) aksi tersebut.

Implementasi Stack

Stack bisa diimplementasikan dengan dua cara utama, yaitu menggunakan array dan menggunakan linked list. Masing-masing punya kelebihan dan kekurangan.

Implementasi Stack dengan Array

Implementasi stack dengan array cukup sederhana. Kita perlu sebuah array untuk menyimpan elemen-elemen stack, dan sebuah variabel (biasanya disebut top) untuk menunjukkan indeks elemen teratas.

Kelebihan:

  • Implementasi sederhana dan mudah dipahami.
  • Akses elemen relatif cepat karena menggunakan indeks array.

Kekurangan:

  • Ukuran stack terbatas (harus ditentukan di awal).
  • Jika stack sudah penuh, tidak bisa menambahkan elemen lagi (stack overflow).

Contoh Kode (Python):

class Stack:
    def __init__(self, capacity):
        self.capacity = capacity
        self.stack = [None] * capacity
        self.top = -1

    def is_empty(self):
        return self.top == -1

    def is_full(self):
        return self.top == self.capacity - 1

    def push(self, item):
        if self.is_full():
            print("Stack overflow!")
            return
        self.top += 1
        self.stack[self.top] = item

    def pop(self):
        if self.is_empty():
            print("Stack is empty!")
            return None
        item = self.stack[self.top]
        self.stack[self.top] = None  # Optional: for garbage collection
        self.top -= 1
        return item

    def peek(self):
        if self.is_empty():
            print("Stack is empty!")
            return None
        return self.stack[self.top]

# Contoh penggunaan
stack = Stack(5)
stack.push(10)
stack.push(20)
stack.push(30)

print(stack.peek())  # Output: 30
print(stack.pop())   # Output: 30
print(stack.pop())   # Output: 20

Implementasi Stack dengan Linked List

Implementasi stack dengan linked list lebih fleksibel. Kita menggunakan node-node yang saling terhubung untuk menyimpan elemen-elemen stack. Setiap node memiliki data dan pointer ke node berikutnya.

Kelebihan:

  • Ukuran stack tidak terbatas (selama memori masih tersedia).
  • Tidak ada masalah stack overflow.

Kekurangan:

  • Implementasi lebih kompleks daripada array.
  • Akses elemen lebih lambat karena harus melalui pointer.

Contoh Kode (Python):

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class Stack:
    def __init__(self):
        self.top = None

    def is_empty(self):
        return self.top is None

    def push(self, item):
        new_node = Node(item)
        new_node.next = self.top
        self.top = new_node

    def pop(self):
        if self.is_empty():
            print("Stack is empty!")
            return None
        item = self.top.data
        self.top = self.top.next
        return item

    def peek(self):
        if self.is_empty():
            print("Stack is empty!")
            return None
        return self.top.data

# Contoh penggunaan
stack = Stack()
stack.push(10)
stack.push(20)
stack.push(30)

print(stack.peek())  # Output: 30
print(stack.pop())   # Output: 30
print(stack.pop())   # Output: 20

Contoh Penggunaan Stack dalam Kehidupan Sehari-hari

Selain contoh-contoh di atas, stack juga sering kita jumpai dalam kehidupan sehari-hari, lho!

1. Tumpukan Buku

Coba deh perhatikan tumpukan buku di meja belajar kamu. Buku yang terakhir kamu taruh di atas tumpukan, pasti jadi buku pertama yang kamu ambil kan? Nah, itu dia contoh sederhana dari konsep stack.

2. Fitur Undo/Redo di Aplikasi

Saat kamu lagi ngetik atau ngedit sesuatu di aplikasi, pasti sering kan pakai fitur undo (Ctrl+Z) atau redo (Ctrl+Y)? Nah, di balik fitur itu, ada stack yang bekerja. Setiap aksi yang kamu lakukan disimpan di stack, jadi kamu bisa dengan mudah membatalkan atau mengulang aksi tersebut.

3. Navigasi Web Browser

Saat kamu browsing internet, tombol back dan forward di web browser juga menggunakan konsep stack. Setiap halaman yang kamu kunjungi disimpan di stack. Saat kamu klik tombol back, kamu akan kembali ke halaman sebelumnya (yang ada di atas stack).

Kesimpulan

Stack adalah struktur data yang sangat penting dalam informatika. Dengan prinsip LIFO (Last In, First Out), stack memungkinkan kita untuk mengelola data dengan efisien dalam berbagai aplikasi, mulai dari manajemen memori hingga fitur undo/redo. Implementasinya pun cukup sederhana, bisa menggunakan array maupun linked list, tergantung kebutuhan dan batasan yang ada. Jadi, jangan lupa untuk terus belajar dan eksplorasi tentang stack ya, guys! Semoga artikel ini bermanfaat dan menambah wawasan kalian!