// ALGORITMA & PEMROGRAMAN // KODE: algoritma-struktur-data-dasar

Implementasi Struktur Data Stack & Queue pada Praktikum Pemrograman

#algoritma#struktur-data#python#stack#queue

1. Tujuan Praktikum

Memahami cara kerja mekanisme penyimpanan data linier dinamis dan mengimplementasikan struktur data Stack dan Queue dari nol tanpa menggunakan library bawaan instan.

2. Konsep Stack (LIFO: Last In, First Out)

Elemen yang terakhir dimasukkan adalah elemen yang pertama kali dikeluarkan. Contoh di dunia nyata: tumpukan piring atau tombol Undo pada text editor.

Operasi Utama Stack:

  • push(item): Menambah elemen ke puncak stack (O(1)).
  • pop(): Mengambil & menghapus elemen teratas (O(1)).
  • peek(): Melihat elemen teratas tanpa menghapusnya (O(1)).

Implementasi Stack di Python:

PYTHON
class Stack:
    def __init__(self):
        self._items = []

    def is_empty(self):
        return len(self._items) == 0

    def push(self, item):
        self._items.append(item)

    def pop(self):
        if self.is_empty():
            raise IndexError("Stack underflow: stack kosong!")
        return self._items.pop()

    def peek(self):
        if self.is_empty():
            return None
        return self._items[-1]

    def size(self):
        return len(self._items)

# Pengujian:
s = Stack()
s.push("BAB 1")
s.push("BAB 2")
print("Top:", s.peek())  # Output: BAB 2
print("Pop:", s.pop())    # Output: BAB 2
print("Now Top:", s.peek()) # Output: BAB 1

3. Konsep Queue (FIFO: First In, First Out)

Elemen yang pertama kali masuk adalah yang pertama kali dilayani. Contoh: antrian tiket bioskop atau antrian cetak print spooler.

Implementasi Queue Efisien dengan `collections.deque`:

Jika menggunakan list biasa di Python, operasi pop(0) memiliki kompleksitas $O(n)$ karena seluruh elemen harus digeser. Menggunakan collections.deque menjamin $O(1)$ untuk kedua ujung antrian:

PYTHON
from collections import deque

class Queue:
    def __init__(self):
        self._items = deque()

    def is_empty(self):
        return len(self._items) == 0

    def enqueue(self, item):
        self._items.append(item)

    def dequeue(self):
        if self.is_empty():
            raise IndexError("Queue underflow: antrian kosong!")
        return self._items.popleft()

    def size(self):
        return len(self._items)

# Pengujian Antrian:
q = Queue()
q.enqueue("Mahasiswa A")
q.enqueue("Mahasiswa B")
print("Dilayani:", q.dequeue()) # Output: Mahasiswa A
print("Antrian sisa:", q.size()) # Output: 1

4. Referensi

  • Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C. (2009). Introduction to Algorithms (3rd Edition). MIT Press.
  • Modul Praktikum Struktur Data & Algoritma TRM Boash.