0% menganggap dokumen ini bermanfaat (0 suara)
40 tayangan14 halaman

Modul 3 Stack

Dokumen ini membahas konsep dan implementasi Stack sebagai struktur data LIFO (Last In, First Out) dalam pemrograman, khususnya menggunakan Python. Mahasiswa diharapkan dapat memahami dan menerapkan operasi dasar seperti push, pop, dan peek, serta menganalisis penggunaan Stack dalam berbagai aplikasi praktis. Selain itu, dokumen ini juga membandingkan Stack dengan struktur data lain seperti Array dan Linked List, serta menjelaskan kelebihan dan kekurangan masing-masing.

Diunggah oleh

Ardhaa Virniaa
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
40 tayangan14 halaman

Modul 3 Stack

Dokumen ini membahas konsep dan implementasi Stack sebagai struktur data LIFO (Last In, First Out) dalam pemrograman, khususnya menggunakan Python. Mahasiswa diharapkan dapat memahami dan menerapkan operasi dasar seperti push, pop, dan peek, serta menganalisis penggunaan Stack dalam berbagai aplikasi praktis. Selain itu, dokumen ini juga membandingkan Stack dengan struktur data lain seperti Array dan Linked List, serta menjelaskan kelebihan dan kekurangan masing-masing.

Diunggah oleh

Ardhaa Virniaa
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 14

Praktikum Struktur Data 2024/2025 – 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.

Stack memungkinkan operasi penyisipan (Push) dan penghapusan (Pop) dilakukan


hanya pada satu ujung, yang disebut TOP. Dengan karakteristik ini, Stack menjadi struktur
data yang sederhana namun sangat efektif dalam banyak kasus penggunaan di dunia
nyata dan dalam pengembangan perangkat lunak.

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 Last In, First Out (LIFO):

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.

• Akses Data Terbatas (Hanya dari TOP)

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.

• Memori Berurutan atau Dinamis

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.

• Efisiensi Operasi (O(1) Complexity)

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.

• Rentan terhadap Stack Overflow dan Stack Underflow

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.

3. Cara Kerja Stack

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:

Gambar 1. Ilustrasi Stack

Berikut adalah tahapan yang terjadi dalam gambar:

1. Empty Stack (Stack Kosong)


Pada awalnya, Stack tidak memiliki elemen. Stack berada dalam kondisi kosong.

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).

4. Kelebihan dan Kekurangan Stack

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:

Aspek Keunggulan Kelemahan


Struktur Mudah diimplementasikan karena Tidak fleksibel karena hanya
Sederhana hanya memiliki satu titik akses bisa diakses dari satu ujung
(TOP). (TOP).
Efisiensi Operasi Operasi Push (menambah) dan Pop Jika Stack diimplementasikan
(menghapus) dilakukan dalam O(1) dengan Array, ukurannya
waktu karena tidak ada pergeseran harus ditentukan di awal,
elemen. menyebabkan keterbatasan
kapasitas.
Aplikasi dalam Berguna dalam rekursi, evaluasi Tidak bisa mengakses
Algoritma ekspresi matematika, dan elemen di tengah atau
pencarian jalur (DFS - Depth First bawah Stack tanpa
Search). menghapus elemen di
atasnya terlebih dahulu.
Penggunaan Digunakan dalam fitur Undo/Redo Rentan terhadap Stack
dalam Navigasi pada aplikasi, navigasi browser Overflow jika ukuran Stack
(Back & Forward), dan sistem mencapai batas maksimal,
manajemen memori komputer. dan Stack Underflow jika
Stack kosong.
Fleksibilitas Bisa diimplementasikan Jika menggunakan Linked
Implementasi menggunakan Array (statis) atau List, membutuhkan memori
Linked List (dinamis) sesuai tambahan untuk menyimpan
kebutuhan aplikasi. pointer ke elemen
berikutnya.

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..

5. Perbandingan Stack dengan Struktur Data Lainnya

Dalam pemrograman, setiap struktur data memiliki keunggulan dan keterbatasan


masing-masing yang membuatnya lebih cocok untuk situasi tertentu. Stack, Queue,
Array, dan Linked List adalah beberapa struktur data yang sering digunakan, masing-
masing dengan cara kerja dan kegunaannya sendiri. Tabel berikut membandingkan
Stack dengan struktur data lainnya untuk memberikan gambaran yang lebih jelas
tentang kapan masing-masing struktur data sebaiknya digunakan

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.

6. Implementasi Stack pada Python

Dalam pemrograman Python, terdapat beberapa cara untuk mengimplementasikan


Stack, tergantung pada kebutuhan aplikasi yang dikembangkan. Stack dapat
diimplementasikan dengan berbagai metode, masing-masing memiliki keunggulan dan

5
Praktikum Struktur Data 2024/2025 – STACK

keterbatasan. Beberapa pendekatan umum yang digunakan untuk


mengimplementasikan Stack dalam Python antara lain:

6.1. Menggunakan List Python


Python memiliki struktur data list yang dapat digunakan sebagai Stack dengan
memanfaatkan metode bawaan seperti append() untuk Push dan pop() untuk Pop.
Keunggulan:
Mudah dipahami dan diimplementasikan tanpa perlu library tambahan.
Memanfaatkan fitur bawaan Python yang sudah tersedia.
Kelemahan:
Jika operasi pop(0) digunakan, kompleksitasnya adalah O(n) karena elemen
lainnya harus bergeser.
Tidak dioptimalkan secara khusus untuk operasi Stack.

6.2. Menggunakan collections.deque


Python menyediakan deque (double-ended queue) dari modul collections, yang
lebih efisien dibandingkan list untuk operasi Stack.
Keunggulan:
Memiliki O(1) complexity untuk operasi push dan pop di ujung list.
Lebih cepat dibandingkan list biasa karena dioptimalkan untuk manipulasi data
dari kedua ujungnya.
Kelemahan:
Memerlukan import dari modul collections, meskipun sudah termasuk dalam
pustaka standar Python.

6.3. Menggunakan queue.LifoQueue

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.4. Menggunakan Class dan Object (OOP - Object-Oriented Programming)


Pendekatan berbasis Object-Oriented Programming (OOP) memungkinkan
pembuatan Stack yang lebih fleksibel dengan fitur tambahan seperti pembatas
ukuran, validasi operasi, dan penanganan error yang lebih baik.

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..

7.1. Push(x) – Menambahkan Elemen ke Stack


Operasi Push(x) digunakan untuk menambahkan elemen baru ke atas Stack.
Jika Stack diimplementasikan dengan Array, kita harus memastikan bahwa Stack
belum penuh (tidak terjadi Stack Overflow). Bayangkan Anda sedang menyusun
tumpukan piring di dapur. Setiap kali Anda menambahkan piring baru, Anda selalu
meletakkannya di bagian atas tumpukan. Piring baru ini akan menjadi yang pertama
diambil ketika seseorang membutuhkan piring.

Berikut adalah cara mengimplementasikan operasi Push dalam Python


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

def push(self, item):


self.stack.append(item)

# 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.2. Pop() – Menghapus Elemen dari Stack


Operasi Pop() digunakan untuk menghapus elemen teratas dari Stack. Jika
Stack kosong, maka operasi ini tidak dapat dilakukan (Stack Underflow). Kembali ke
tumpukan piring, jika seseorang ingin mengambil piring, mereka akan mengambil
piring teratas terlebih dahulu sebelum bisa mengambil piring yang berada di

7
Praktikum Struktur Data 2024/2025 – STACK

bawahnya. Begitu pula dalam Stack, elemen teratas akan dikeluarkan terlebih dahulu
sebelum elemen lainnya.

Berikut adalah cara mengimplementasikan operasi Pop dalam Python:


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

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]

Fungsi pop() menghapus elemen teratas dari Stack menggunakan metode


pop(). Jika Stack kosong, fungsi akan mengembalikan pesan "Stack Kosong",
menghindari error akibat mencoba menghapus elemen dari Stack kosong.

7.3. Peek() – Melihat Elemen Teratas Tanpa Menghapusnya


Operasi Peek() digunakan untuk melihat elemen teratas Stack tanpa
menghapusnya. Saat Anda ingin melihat buku paling atas dalam tumpukan buku,
Anda tidak perlu mengambil atau mengeluarkan buku tersebut. Anda hanya cukup
melihat judulnya tanpa harus merubah posisi buku lainnya dalam tumpukan. Begitu
pula dengan Stack, kita dapat melihat elemen teratas tanpa menghapusnya.

Berikut adalah cara mengimplementasikan operasi Peek dalam Python:


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

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]

Fungsi peek() memeriksa apakah Stack kosong sebelum mengakses elemen


teratas. Jika Stack kosong, fungsi akan mengembalikan pesan "Stack Kosong" untuk
menghindari error. Jika terdapat elemen dalam Stack, elemen terakhir akan
dikembalikan tanpa mengubah susunan elemen di dalamnya. Dengan menggunakan
indeks -1, kita bisa langsung mengambil elemen terakhir dari list Python yang
digunakan sebagai Stack.

8
Praktikum Struktur Data 2024/2025 – STACK

7.4. isEmpty() – Mengecek Apakah Stack Kosong


Operasi isEmpty() digunakan untuk mengecek apakah Stack tidak memiliki
elemen. Bayangkan sebuah kotak penyimpanan yang digunakan untuk menyimpan file
dokumen. Jika kotak ini kosong, maka tidak ada file di dalamnya, dan kita tidak bisa
mengambil apa pun. Jika kotak berisi dokumen, kita bisa melihat bahwa setidaknya ada
sesuatu di dalamnya.

Berikut adalah cara mengimplementasikan operasi isEmpty dalam Python:


class Stack:
def __init__(self):
self.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().

Contoh Kode Program:


class TextEditor:
def __init__(self):
self.history = []

def write(self, text):


self.history.append(text)

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.

2. Implementasi Stack dengan collections.deque – Navigasi History Browser


(push())

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.

Contoh Kode Program:


from collections import deque

class BrowserHistory:
def __init__(self):
self.history = deque()

def visit(self, url):


self.history.append(url)
print(f"Mengunjungi: {url}")

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.

• visit(url) menambahkan halaman ke Stack menggunakan push() (append()).


• back() menghapus halaman terakhir yang dikunjungi (pop()).
• Jika Stack kosong, program akan menampilkan pesan bahwa tidak ada riwayat
yang bisa diakses.

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.

3. Implementasi Stack dengan queue.LifoQueue – Sistem Pencadangan File


(peek())

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.

Contoh Kode Program:


from queue import LifoQueue

class BackupSystem:
def __init__(self):
self.backups = LifoQueue()

def backup(self, version):


self.backups.put(version)

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().

• backup(version) menambahkan file cadangan ke Stack menggunakan put()


(push()).
• latest_backup() melihat versi terakhir file tanpa menghapusnya (peek()).
• Jika Stack kosong, program akan menampilkan pesan bahwa tidak ada file
cadangan yang tersedia.

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

4. Implementasi Stack dengan OOP – Manajemen Antrian Pelanggan


(isEmpty())

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().

Contoh Kode Program:


class CustomerService:
def __init__(self):
self.tickets = []

def add_ticket(self, ticket):


self.tickets.append(ticket)

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

Rombel GANJIL : Tower of Hanoi


Deskripsi:
Tower of Hanoi adalah permainan klasik di mana pemain harus memindahkan
tumpukan cakram dari satu tiang ke tiang lain, mengikuti aturan tertentu. Stack
digunakan untuk menyimpan cakram pada masing-masing tiang dan memastikan bahwa
cakram teratas selalu diambil terlebih dahulu (prinsip LIFO).

Konsep Stack:
Push → Menambahkan cakram ke tiang tertentu.

Pop → Menghapus cakram dari tiang saat dipindahkan.

Tantangan untuk Mahasiswa:


• Implementasikan game Tower of Hanoi untuk minimal 3 cakram.

• Gunakan Stack untuk menyimpan cakram di setiap tiang.

• Gunakan NPM mahasiswa sebagai jumlah langkah maksimal (misalnya, dua digit
terakhir NPM).

Rombel GENAP: Simulasi Tumpukan Barang dalam Gudang

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.

Pop → Mengambil barang terakhir yang masuk.

Tantangan untuk Mahasiswa:


• Gunakan Stack untuk menyimpan daftar barang dalam 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

Anda mungkin juga menyukai