STACK
ALGORITMA & STRUKTUR DATA 2
Stack
• Stack (tumpukan) adalah sebuah daftar elemen data dimana
penambahan dan pengambilan/penghapusan data hanya dilakukan
pada posisi akhir
• Menggunkan kaidah Last In First Out (LIFO)
• Posisi awal stack disebut sebagai Base
• Posisi akhir stack disebut sebagai Top Data 3 Top
Data 2
Data 1 Base
Stack
• Contoh penerapan stack dalam kehidupan sehari-hari misalanya
tumpukan piring di restoran, dimana tumpukannya dapat ditambah
pada bagian paling atas dan jika mengambilnya pun dari bagian paling
atas
• Contoh lain:
Tumpukan Tumpukan Tumpukan
koin kotak buku
Stack
• Contoh penerapan stack di dunia komputer:
1. Undo – redo
2. Reverse string
3. Tombol Next dan Back pada web browser
4. Penghitungan rumus matematika (dengan memperhatikan
urutan prioritas operator)
Operasi pada Stack
• Terdapat 2 operasi dasar:
1. Push: operasi menambahkan elemen pada urutan
terakhir/paling atas (top)
2. Pop: operasi mengambil sebuah elemen pada urutan terakhir
(top) dan menghapus elemen tersebut dari stack
Operasi pada Stack
• Contoh:
Sumber : [Link]
Stack pada Python
Stack pada Python
• Dalam python stack dapat diimplementasikan dengan beberapa cara
diantaranya:
1. Menggunakan List
2. Menggunakan Modules
Stack Menggunakan List
• Operasi stack menggunakan list dapat dilihat pada tabel berikut:
Operasi Method Keterangan
Push append() Menambah elemen di akhir list (stack)
Pop pop() Menghapus elemen di akhir list (stack)
Stack Menggunakan List
• Contoh 1:
stack = [] #stack kosong Hasil Eksekusi:
print(stack)
[Link](10) #push(10) []
[Link](20) #push(20) [10, 20, 30]
[Link](30) #push(30) Elemen yang dihapus: 30
print(stack) [10, 20]
hapus=[Link]() #pop() Elemen yang dihapus: 20
print("Elemen yang dihapus: ", hapus)
[10]
print(stack)
hapus=[Link]() #pop()
Elemen yang dihapus: 10
print("Elemen yang dihapus: ", hapus) []
print(stack)
hapus=[Link]() #pop()
print("Elemen yang dihapus: ", hapus)
print(stack)
Stack Menggunakan List
• Contoh 2:
stack = []
isEmpty=len(stack)==0 #mengecek apakah list (stack) kosong
print(isEmpty)
isEmpty=not stack #mengecek apakah list (stack) kosong
print(isEmpty)
[Link](10)
[Link](20)
[Link](30)
print("Top: ",stack[-1]) #melihat elemen top (elemen di posisi paling akhir)
Hasil Eksekusi:
True
True
Top: 30
Stack Menggunakan Modules
• Pada python terdapat beberapa modul yang dapat digunakan untuk
mengimplementasikan stack:
1. Collection (menggunakan Deque (Double Ended Queue) Class)
2. Queue (menggunakan LifoQueue Class)
Stack Menggunakan Deque Class
• Operasi stack menggunakan deque class dapat dilihat pada tabel
berikut:
Operasi Method Keterangan
Push append() Menambah elemen di akhir stack
Pop pop() Menghapus elemen di akhir stack
Stack Menggunakan Deque Class
• Contoh 1:
import collections Hasil Eksekusi:
stack = [Link]()
print(stack) #stack kosong deque([])
[Link](10) #push(10) deque([10, 20, 30])
[Link](20) #push(20) Elemen yang dihapus: 30
[Link](30) #push(30) deque([10, 20])
print(stack) Elemen yang dihapus: 20
hapus=[Link]() #pop()
deque([10])
print("Elemen yang dihapus: ",hapus)
print(stack)
Elemen yang dihapus: 10
hapus=[Link]() #pop() deque([])
print("Elemen yang dihapus: ",hapus)
print(stack)
hapus=[Link]() #pop()
print("Elemen yang dihapus: ",hapus)
print(stack)
Stack Menggunakan Deque Class
• Contoh 2:
import collections Hasil Eksekusi:
stack = [Link]()
True
isEmpty=len(stack)==0 #mengecek apakah stack kosong True
print(isEmpty) Top: 30
isEmpty=not stack #mengecek apakah stack kosong
print(isEmpty)
[Link](10)
[Link](20)
[Link](30)
print("Top: ",stack[-1]) #melihat elemen top
(elemen di posisi paling akhir)
Stack Menggunakan LifoQueue Class
• Operasi stack menggunakan LifoQueue class dapat dilihat pada tabel
berikut:
Operasi Method Keterangan
Push put() Menambah elemen di akhir stack
Pop get() Menghapus elemen di akhir stack
Stack Menggunakan LifoQueue Class
• Contoh 1:
import queue Hasil Eksekusi:
stack = [Link]()
print([Link]) #stack kosong []
[Link](10) #push(10) [10, 20, 30]
[Link](20) #push(20) Elemen yang dihapus: 30
[Link](30) #push(30) [10, 20]
print([Link]) Elemen yang dihapus: 20
hapus=[Link]() #pop()
[10]
print("Elemen yang dihapus: ",hapus)
print([Link])
Elemen yang dihapus: 10
hapus=[Link]() #pop() []
print("Elemen yang dihapus: ",hapus)
print([Link])
hapus=[Link]() #pop()
print("Elemen yang dihapus: ",hapus)
print([Link])
Stack Menggunakan LifoQueue Class
• Contoh 2:
import queue
stack = [Link](3) #menentukan jumlah maksimal elemen
print([Link]()) #mengecek apakah stack kosong
[Link](10)
[Link](20)
[Link](30)
print([Link])
print([Link]()) #mengecek apakah stack penuh
print([Link][-1]) #melihat elemen top (elemen di posisi paling akhir)
Hasil Eksekusi:
True
[10, 20, 30]
True
30
Stack pada Python
• Selain menggunakan list dan modules, implementasi stack pada
python dapat juga dilakukan menggunakan Linked List (menggunakan
class buatan sendiri)
• Implementasi stack menggunakan linked list adalah dengan cara
melakukan penambahan dan penghapusan elemen yang hanya
dilakukan di node depan
• Node paling depan dapat diberi nama Top
TERIMA KASIH