Modul 3 Stack
Modul 3 Stack
A. TUJUAN PEMBELAJARAN
1. Mahasiswa mampu memahami konsep Stack sebagai struktur data LIFO (Last In, First
Out).
2. Mahasiswa mampu mengimplementasikan Stack menggunakan Python.
3. Mahasiswa mampu menerapkan operasi dasar push, pop, peek, dan isEmpty pada
Stack.
4. Mahasiswa dapat menganalisis dan memahami bagaimana Stack digunakan dalam
berbagai situasi praktis dan mampu mengembangkan solusi berdasarkan skenario
yang diberikan.
B. DASAR TEORI
Dalam pemrograman, pengelolaan data yang efisien sangat penting untuk memastikan
kinerja aplikasi yang optimal. Salah satu struktur data yang sering digunakan adalah Stack,
yang memiliki sifat Last In, First Out (LIFO). Struktur ini sangat berguna dalam berbagai
aplikasi, terutama yang membutuhkan pemrosesan data secara terbalik atau bertahap,
seperti sistem Undo/Redo, Navigasi Browser, Rekursi, dan Parsing Ekspresi Matematika.
Dalam modul ini, kita akan membahas konsep dasar Stack, cara kerjanya,
karakteristiknya, keunggulan dan kelemahannya, serta implementasinya dalam
pemrograman Python.
1. Pengertian Stack
Dalam kehidupan sehari-hari, tanpa kita sadari, kita sering berinteraksi dengan konsep
Stack. Salah satu contohnya adalah ketika kita menggunakan tombol kembali (Back) di
browser. Setiap halaman web yang dikunjungi akan disimpan dalam suatu tumpukan.
Ketika kita menekan tombol Back, browser akan menghapus halaman terakhir yang
dikunjungi dan mengembalikan kita ke halaman sebelumnya. Begitu juga dalam aplikasi
pengolah kata seperti Microsoft Word atau Google Docs, fitur Undo/Redo bekerja dengan
cara menyimpan setiap perubahan dalam Stack. Saat tombol Undo ditekan, perubahan
terbaru akan dihapus dan dokumen dikembalikan ke keadaan sebelumnya. Contoh
lainnya adalah tumpukan piring di restoran, di mana piring yang terakhir ditumpuk akan
menjadi piring pertama yang diambil.
Dalam pemrograman, Stack adalah struktur data yang mengikuti prinsip Last In, First
Out (LIFO). Artinya, elemen yang terakhir dimasukkan ke dalam Stack akan menjadi
elemen pertama yang keluar. Stack hanya memiliki satu titik akses utama, yaitu TOP, yang
digunakan untuk menambah (push) dan menghapus (pop) elemen. Karena sifatnya yang
sederhana dan efisien, Stack sering digunakan dalam berbagai algoritma dan sistem
komputer, termasuk dalam rekursi, parsing ekspresi matematika, dan manajemen
memori.
1
Praktikum Struktur Data 2024/2025 – STACK
Jika dibandingkan dengan Array dan Linked List, Stack memiliki keunggulan dan
kekurangannya sendiri. Array memungkinkan akses data secara langsung menggunakan
indeks, tetapi ukurannya tetap sehingga kurang fleksibel dalam menangani perubahan
ukuran data. Linked List, di sisi lain, lebih fleksibel karena ukurannya dapat berubah secara
dinamis, tetapi membutuhkan lebih banyak memori karena harus menyimpan pointer ke
elemen berikutnya. Stack dapat diimplementasikan dengan Array maupun Linked List,
tergantung pada kebutuhan. Implementasi menggunakan Array lebih sederhana tetapi
memiliki keterbatasan kapasitas, sedangkan implementasi menggunakan Linked List lebih
fleksibel tetapi memerlukan alokasi memori tambahan.
2. Karakteristik Stack
Stack memiliki beberapa karakteristik utama yang membedakannya dari struktur data
lainnya. Karakteristik ini menentukan bagaimana Stack bekerja dan dalam situasi apa
struktur ini lebih unggul dibandingkan metode penyimpanan data lainnya. Berikut adalah
beberapa karakteristik utama Stack:
Prinsip utama Stack adalah Last In, First Out (LIFO), yang berarti elemen yang terakhir
dimasukkan akan menjadi elemen pertama yang keluar. Mekanisme ini mirip dengan
tumpukan piring, di mana piring yang paling atas akan diambil lebih dulu sebelum
piring lainnya.
Stack hanya memungkinkan akses data melalui satu ujung yang disebut TOP. Semua
operasi penambahan (Push) dan penghapusan (Pop) hanya dapat dilakukan dari
bagian teratas Stack. Hal ini berbeda dengan Array dan Linked List yang memungkinkan
akses ke elemen mana pun di dalamnya.
Stack dapat diimplementasikan menggunakan Array (statis) atau Linked List (dinamis):
o Stack berbasis Array memiliki ukuran tetap yang ditentukan saat deklarasi. Jika
kapasitas Stack penuh, operasi push tidak bisa dilakukan lagi (Stack Overflow).
o Stack berbasis Linked List lebih fleksibel karena ukurannya dapat bertambah
atau berkurang sesuai kebutuhan, tetapi membutuhkan memori tambahan
untuk menyimpan pointer ke elemen berikutnya.
Semua operasi utama pada Stack – Push, Pop, dan Peek – memiliki kompleksitas waktu
O(1), yang berarti operasi ini dilakukan dalam waktu konstan terlepas dari jumlah
elemen dalam Stack. Ini membuat Stack sangat efisien dibandingkan struktur data
yang memerlukan pergeseran elemen seperti Array.
Karena Stack memiliki kapasitas terbatas jika diimplementasikan dengan Array, ada
risiko Stack Overflow, yaitu kondisi di mana Stack penuh dan tidak dapat menerima
2
Praktikum Struktur Data 2024/2025 – STACK
elemen baru. Sebaliknya, Stack Underflow terjadi ketika kita mencoba menghapus
elemen dari Stack yang kosong.
Stack bekerja dengan prinsip Last In, First Out (LIFO), di mana elemen yang terakhir
dimasukkan akan menjadi elemen pertama yang keluar. Semua operasi Stack dilakukan
hanya pada satu ujung yang disebut TOP. Proses ini membuat Stack sangat efisien dalam
skenario di mana data perlu diproses dalam urutan terbalik atau secara bertahap. Berikut
adalah ilustrasi cara kerja stack:
2. Push(1)
- Elemen 1 dimasukkan ke dalam Stack.
- Karena Stack sebelumnya kosong, 1 menjadi elemen pertama dan terletak
di posisi TOP.
3. Push(2)
- Elemen 2 dimasukkan ke dalam Stack.
- Elemen ini ditambahkan di atas elemen sebelumnya, sehingga 2 menjadi
TOP Stack.
4. Push(3)
- Elemen 3 dimasukkan ke dalam Stack.
- Elemen ini ditambahkan di atas elemen sebelumnya, sehingga 3 menjadi
TOP Stack.
5. Pop()
- Operasi Pop dilakukan, yang berarti elemen teratas dihapus dari Stack.
- Elemen 3, yang terakhir dimasukkan, akan menjadi elemen pertama yang
keluar.
- Setelah operasi ini, 2 menjadi elemen teratas (TOP).
Stack merupakan struktur data yang memiliki berbagai keunggulan, terutama dalam
hal kesederhanaan implementasi dan efisiensi operasi. Dengan prinsip Last In, First
3
Praktikum Struktur Data 2024/2025 – STACK
Out (LIFO), Stack sangat berguna dalam aplikasi seperti rekursi, navigasi browser, dan
manajemen memori. Namun, Stack juga memiliki beberapa keterbatasan, seperti
akses data yang terbatas hanya dari TOP dan potensi Stack Overflow atau Stack
Underflow jika tidak dikelola dengan baik. Oleh karena itu, penting untuk memahami
kelebihan dan kekurangan Stack sebelum memilihnya sebagai struktur data yang akan
digunakan. Berikut adalah perbandingan keunggulan dan kekurangan Stack:
Stack adalah struktur data yang sangat berguna dalam pemrosesan data yang
membutuhkan pengolahan secara berurutan dan terbalik. Keunggulannya terletak
pada kemudahan implementasi, efisiensi operasi, serta perannya dalam algoritma
penting seperti rekursi dan evaluasi ekspresi. Namun, Stack juga memiliki
keterbatasan, terutama dalam akses data yang hanya terbatas dari TOP dan
kemungkinan Stack Overflow atau Stack Underflow jika tidak dikelola dengan baik.
Oleh karena itu, dalam memilih Stack sebagai struktur data, perlu dipertimbangkan
apakah skenario penggunaannya sesuai dengan karakteristik Stack agar dapat
dimanfaatkan secara optimal..
4
Praktikum Struktur Data 2024/2025 – STACK
Linked List
Aspek Stack (LIFO) Queue (FIFO) Array (Statik)
(Dinamis)
Prinsip Last In, First First In, First Out Menggunakan Node saling
Operasi Out (LIFO) (FIFO) indeks tetap terhubung
Akses Data Dapat diakses Harus ditelusuri dari
Hanya dari
Hanya dari FRONT langsung HEAD ke elemen
TOP
melalui indeks yang dicari
Tambahkan/ Push Enqueue Menambah/m
Hapus Data (menambah) (menambah) dari enghapus di Lebih fleksibel
dan Pop belakang, tengah karena bisa
(menghapus) Dequeue membutuhkan menambah/mengha
dilakukan di (menghapus) dari pergeseran pus di mana saja
TOP depan elemen
Kecepatan O(1) untuk
O(1) untuk
Operasi akses
O(1) untuk sisipan/hapus di
O(1) untuk langsung,
Enqueue dan awal atau akhir,
Push dan Pop tetapi O(n)
Dequeue tetapi O(n) untuk
untuk
pencarian
sisipan/hapus
Struktur Bisa berbasis Bisa berbasis Dinamis (bisa
Statik
Memori Array (statis) Array (statis) atau bertambah/berkura
(ditentukan
atau Linked Linked List ng sesuai
saat deklarasi)
List (dinamis) (dinamis) kebutuhan)
Kegunaan Undo/Redo, Penyimpanan
Struktur data yang
Umum Navigasi Antrian Proses data
sering berubah-
Browser, CPU, Pemrosesan sederhana
ubah, seperti sistem
Evaluasi Data Streaming, yang
antrean dinamis dan
Ekspresi, Manajemen Tugas ukurannya
graf
Rekursi tetap
Kelemahan Tidak bisa Harus selalu
mengakses menghapus Ukuran tetap, Menggunakan lebih
elemen di elemen dari tidak bisa banyak memori
tengah depan (tidak berubah karena menyimpan
secara fleksibel dalam secara dinamis pointer tambah
langsung akses acak)
Dari tabel di atas, terlihat bahwa Stack, Queue, Array, dan Linked List memiliki
karakteristik yang berbeda dan cocok untuk kasus penggunaan yang berbeda pula.
• Stack cocok untuk skenario di mana data perlu diproses dalam urutan terbalik,
seperti rekursi, evaluasi ekspresi matematika, dan navigasi history.
• Queue lebih cocok untuk sistem antrian, seperti manajemen proses CPU atau
antrean pencetakan.
• Array menawarkan akses cepat ke elemen tertentu, tetapi ukurannya tetap.
• Linked List lebih fleksibel dalam menambah dan menghapus elemen, tetapi
membutuhkan lebih banyak memori.
Pemilihan struktur data yang tepat sangat bergantung pada kebutuhan aplikasi
dan skenario penggunaannya.
5
Praktikum Struktur Data 2024/2025 – STACK
Python juga menyediakan modul queue yang memiliki kelas LifoQueue, yang
mengimplementasikan Stack secara thread-safe, cocok untuk aplikasi yang berjalan
dalam multi-threading.
Keunggulan:
Thread-safe, sehingga lebih aman digunakan dalam sistem multi-threading.
Dapat menetapkan batas ukuran Stack untuk menghindari Stack Overflow.
Kelemahan:
Performa sedikit lebih lambat dibandingkan deque karena memiliki mekanisme
thread-safety.
Tidak sefleksibel list atau deque untuk manipulasi elemen secara langsung.
6
Praktikum Struktur Data 2024/2025 – STACK
Keunggulan:
Memungkinkan pembuatan Stack yang lebih terstruktur dan dapat diperluas
dengan fitur tambahan.
Cocok digunakan dalam proyek besar yang memerlukan manajemen data lebih
kompleks.
Kelemahan:
Lebih kompleks dibandingkan implementasi sederhana menggunakan list atau
deque.
Membutuhkan lebih banyak kode dibandingkan metode lain.
7. Operasi pada Stack
Pada bagian ini, kita akan mengetahui operasi-operasi dasar yang dapat dilakukan
pada Stack. Stack bekerja dengan prinsip Last In, First Out (LIFO), yang berarti elemen
yang terakhir dimasukkan akan menjadi elemen pertama yang keluar. Semua operasi
pada Stack dilakukan melalui satu titik akses utama, yaitu TOP. Dengan memahami
operasi dasar seperti Push, Pop, Peek, dan isEmpty, kita dapat mengimplementasikan
Stack dengan lebih efektif dalam berbagai aplikasi pemrograman..
# Contoh penggunaan
s = Stack()
s.push(5)
print(s.stack) # Output: [5]
Kode di atas mendefinisikan sebuah kelas Stack yang menggunakan list Python
sebagai penyimpanan elemen. Fungsi push(item) menambahkan elemen ke Stack
dengan metode append(), sehingga elemen baru selalu ditambahkan di bagian akhir
daftar, yang berfungsi sebagai TOP dari Stack.
7
Praktikum Struktur Data 2024/2025 – STACK
bawahnya. Begitu pula dalam Stack, elemen teratas akan dikeluarkan terlebih dahulu
sebelum elemen lainnya.
def pop(self):
if len(self.stack) == 0:
return "Stack Kosong"
return self.stack.pop()
# Contoh penggunaan
s = Stack()
s.push(5)
s.push(10)
print(s.pop()) # Output: 10
print(s.stack) # Output: [5]
def peek(self):
if len(self.stack) == 0:
return "Stack Kosong"
return self.stack[-1]
# Contoh penggunaan
s = Stack()
s.push(5)
s.push(10)
print(s.peek()) # Output: 10
print(s.stack) # Stack tetap [5, 10]
8
Praktikum Struktur Data 2024/2025 – STACK
def is_empty(self):
return len(self.stack) == 0
# Contoh penggunaan
s = Stack()
print(s.is_empty()) # Output: True
s.push(5)
print(s.is_empty()) # Output: False
Fungsi is_empty() memeriksa apakah panjang list Python yang digunakan sebagai
Stack memiliki elemen atau tidak. Jika panjangnya 0, maka Stack dianggap kosong dan
fungsi mengembalikan True, sebaliknya jika ada elemen, fungsi akan mengembalikan
False. Operasi ini sangat berguna sebelum melakukan pop() atau peek() untuk
mencegah error akibat mencoba mengakses elemen dari Stack yang kosong.
C. LANGKAH PRAKTIKUM
1. Implementasi Stack dengan List Python – Fitur "Undo" dalam Teks Editor
(pop())
Dalam aplikasi teks editor seperti Microsoft Word atau Google Docs, fitur Undo sangat
penting. Setiap perubahan teks disimpan dalam Stack, dan saat pengguna menekan
Ctrl + Z, perubahan terakhir dihapus menggunakan operasi pop().
def undo(self):
if self.history:
return f"Undo: Menghapus '{self.history.pop()}'"
return "Tidak ada yang bisa di-undo"
# Contoh Penggunaan
editor = TextEditor()
editor.write("Halo, ini teks pertama.")
editor.write("Ini teks kedua.")
editor.write("Ini teks ketiga.")
print(editor.undo())
print(editor.undo())
9
Praktikum Struktur Data 2024/2025 – STACK
Penjelasan:
Program ini mensimulasikan fitur Undo dalam teks editor menggunakan Stack berbasis
List.
• write(text) → Menyimpan teks dalam Stack (push()).
• undo() → Menghapus teks terakhir (pop()).
• Jika Stack kosong, program akan menampilkan pesan bahwa tidak ada yang bisa
di-undo.
Latihan 1
Buatlah program "Undo Perintah Kalkulator", di mana setiap operasi matematika
yang dilakukan disimpan dalam Stack. Jika pengguna menekan Undo, operasi
terakhir dibatalkan. Gunakan dua digit terakhir NPM sebagai angka awal. Lakukan
minimal 3 operasi matematika sebelum menguji fitur Undo.
Dalam browser seperti Google Chrome atau Mozilla Firefox, setiap halaman yang
dikunjungi akan disimpan dalam Stack. Ketika pengguna menekan tombol Back,
halaman terakhir dikunjungi dihapus, dan halaman sebelumnya ditampilkan.
class BrowserHistory:
def __init__(self):
self.history = deque()
def back(self):
if self.history:
print(f"Kembali ke: {self.history.pop()}")
else:
print("Tidak ada riwayat!")
# Contoh Penggunaan
browser = BrowserHistory()
browser.visit("google.com")
browser.visit("youtube.com")
browser.visit("github.com")
browser.back()
browser.back()
Penjelasan:
Program ini mensimulasikan navigasi history browser, di mana setiap halaman yang
dikunjungi disimpan dalam Stack.
10
Praktikum Struktur Data 2024/2025 – STACK
Latihan 2
Buatlah program "Navigasi History Aplikasi Mobile", di mana fitur aplikasi yang
dikunjungi disimpan dalam Stack.- Gunakan huruf pertama bulan lahir + dua digit
terakhir NPM sebagai nama fitur aplikasi. Simpan minimal 3 fitur sebelum menguji
tombol Back.
Dalam sistem pencadangan file, sering kali versi terbaru dari file disimpan dalam Stack.
Dengan menggunakan operasi peek(), kita dapat melihat versi file terakhir tanpa
menghapusnya.
class BackupSystem:
def __init__(self):
self.backups = LifoQueue()
def latest_backup(self):
if not self.backups.empty():
return f"Versi terbaru: {self.backups.queue[-1]}"
return "Tidak ada cadangan!"
# Contoh Penggunaan
backup_system = BackupSystem()
backup_system.backup("Backup_1")
backup_system.backup("Backup_2")
backup_system.backup("Backup_3")
print(backup_system.latest_backup())
Penjelasan:
Program ini mensimulasikan sistem pencadangan file, di mana versi terbaru dari file
disimpan dalam Stack dan dapat dilihat menggunakan operasi peek().
Latihan 3
Buatlah program "Sistem Penyimpanan Draft Email", di mana email yang belum
dikirim disimpan dalam Stack. Gunakan dua huruf pertama nama mahasiswa + dua
digit terakhir NPM sebagai subjek email. Simpan minimal 3 draft email sebelum
menguji fitur "Lihat Draft Terakhir".
11
Praktikum Struktur Data 2024/2025 – STACK
Dalam sistem antrian layanan pelanggan, Stack dapat digunakan untuk menangani
prioritas tiket layanan. Sebelum memproses tiket, sistem akan mengecek apakah ada
tiket yang tersedia menggunakan isEmpty().
def process_ticket(self):
if not self.is_empty():
return f"Memproses tiket: {self.tickets.pop()}"
return "Tidak ada tiket yang harus diproses."
def is_empty(self):
return len(self.tickets) == 0
# Contoh Penggunaan
service = CustomerService()
service.add_ticket("Tiket 001")
service.add_ticket("Tiket 002")
print(service.process_ticket())
print(service.is_empty())
Penjelasan:
Program ini mensimulasikan sistem antrean layanan pelanggan, di mana pelanggan
yang memiliki tiket akan dimasukkan ke dalam Stack, dan tiket akan diproses satu per
satu.
• add_ticket(ticket) → Menambahkan tiket pelanggan ke Stack (push()).
• process_ticket() → Menghapus tiket terakhir (pop()).
• is_empty() → Mengecek apakah Stack kosong sebelum memproses tiket.
• Jika Stack kosong, program akan menampilkan pesan bahwa tidak ada tiket yang
harus diproses.
Latihan 4
Buatlah program "Sistem Antrean Tiket Bioskop", di mana pelanggan membeli tiket
film dan antrean disimpan dalam Stack. Gunakan huruf pertama bulan lahir + dua
digit terakhir NPM sebagai nama film. Beli minimal 3 tiket sebelum menguji sistem
pemrosesan tiket.
D. TUGAS
Dalam tugas ini, mahasiswa diminta untuk membuat sebuah game sederhana yang
menggunakan Stack sebagai bagian dari mekanisme permainan. Mahasiswa
mengerjakan konsep game sesuai pembagian berikut:
12
Praktikum Struktur Data 2024/2025 – STACK
Konsep Stack:
Push → Menambahkan cakram ke tiang tertentu.
• Gunakan NPM mahasiswa sebagai jumlah langkah maksimal (misalnya, dua digit
terakhir NPM).
Deskripsi:
Dalam game ini, pemain bertindak sebagai manajer gudang yang harus menyusun dan
mengambil barang dari tumpukan dengan aturan Last In, First Out (LIFO).
Konsep Stack:
Push → Menambahkan barang baru ke gudang.
• Pemain dapat memasukkan dan mengambil barang sesuai dengan aturan LIFO.
• Gunakan dua digit terakhir NPM sebagai jumlah maksimal barang dalam gudang
sebelum penuh.
13