0% menganggap dokumen ini bermanfaat (0 suara)
7 tayangan34 halaman

IKL6207 05 Stack Queue

Dokumen ini membahas struktur data Stack dan Queue, termasuk spesifikasi, implementasi, dan penggunaannya dalam pemrograman. Stack beroperasi dengan prinsip Last In First Out (LIFO), sementara Queue menggunakan prinsip First In First Out (FIFO). Contoh implementasi dalam Python juga disertakan, serta aplikasi praktis seperti konversi ekspresi infix ke postfix dan pemanfaatan dalam berbagai sistem.

Diunggah oleh

anung
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)
7 tayangan34 halaman

IKL6207 05 Stack Queue

Dokumen ini membahas struktur data Stack dan Queue, termasuk spesifikasi, implementasi, dan penggunaannya dalam pemrograman. Stack beroperasi dengan prinsip Last In First Out (LIFO), sementara Queue menggunakan prinsip First In First Out (FIFO). Contoh implementasi dalam Python juga disertakan, serta aplikasi praktis seperti konversi ekspresi infix ke postfix dan pemanfaatan dalam berbagai sistem.

Diunggah oleh

anung
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/ 34

IKL6207 Struktur Data dan Algoritma

05 Stack (Tumpukan) dan Queue (Antrian)

1
2
Stack dan Queue
Struktur data linier
Stack /stek/

Queue /kyu/

3
Stack dan Queue
Array secara generic memungkinkan untuk menambahkan elemen di
posisi mana saja.
Stack hanya mengijinkan menambah dan menghapus elemen dari salah
satu ujung Array.
Queue hanya mengijinkan menambah dari satu ujung Array,
dan hanya mengijinkan menghapus dari ujung yang lain.

4
Stack dan Queue
Tumpukan
Memuat kumpulan data, yang tersusun berurut (linear)
Divisualisasikan secara vertikal
Proses penambahan dan penghapusan data selalu dilakukan pada
sisi/ujung yang sama
Top of stack.
Bekerja dengan prinsip Last In First Out (LIFO)
Data yang terakhir masuk data yang akan di proses terlebih dahulu.
Data yang ada “di bawah” top of stack diperlakukan inaccessible.

5
Tipe Data Abstrak (TDA) Stack
Spesifikasi
Apa data yang akan disimpan dalam Stack?
Operasi apa saja yang valid untuk Stack?
Implementasi
Bagaimana TDA Stack diimplementasikan dalam program?
Mendayagunakan tipe data built-in yang tersedia
Mendayagunakan TDA lain yang sudah diimplementasikan
sebelumnya

6
Stack: Spesifikasi
Add: Push()
Remove: Pop()
Hanya ada 1 “ujung”
Last In First Out (LIFO)
Find: “Melihat” elemen paling atas:
Top()
Elemen paling atas; Top Of Stack (TOS)
Elemen-elemen yang tertumpuk di
bawah TOS “diperlakukan” tidak bisa
diakses
7
Queue: Spesifikasi
Add: Enqueue()
Remove: Dequeue()
First In First Out (FIFO)
Find:
"Melihat" elemen paling depan:
Front()
"Melihat" elemen paling belakang:
Rear()
Elemen-elemen di antara front dan
rear “diperlakukan” tidak bisa
diakses 8
Stack menggunakan Python’s list
Struktur data collections bawaan Python
Push: append()

Pop: pop()

Find:
stack[-1]

index()

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

def push(self, item):


self.items.append(item)

def pop(self):
if len(self.items) > 0:
return self.items.pop()
else:
return None

def top(self):
if len(self.items) > 0:
# return self.items[len(self.items)-1]
return self.items[-1]
else:
return None

10
def size(self):
return len(self.items)

def isEmpty(self):
return self.items == []
```
if len(self.items) > 0:
return False
else:
return True
```

def __str__(self):
return str(self.items)

11
Pemanfaatan Stack
Keterpadanan kurung
Mengubah ekspresi Infix ke Postfix

12
Memeriksa Keterpadanan Kurung
Matched parentheses

( ( ) ( ) )
( ) ( ( ) )
{ ( [ ] [ ] ) ( ) }

Unmatched parentheses

( ( ) ( )
( ( ( ) )
( ( ) ) ) (
{ ( [ ] [ ] ) ) ) }

Gunakan Stack 13
Ekspresi Infix
Ekspresi aritmatika tersusun atas Operand dan Operator
Operator: , , , , ,
Pembatasan masalah: Operator-operator lain tidak dibahas (pangkat,
akar, dsb).
Operator ditulis di antara (“ inside ”) Operand

14
Ekspresi Postfix
Operator ditulis setelah ( post ) operands

15
Patterns
Kenapa seperti itu eskpresi postfix-nya?
Menggunakan algoritma mengubah ekspresi infix menjadi ekspresi
postfix.
Menggunakan penelusuran postorder (dibahas pada Bab Tree).
Urutan operands dalam ekspresi infix maupun postfix tidak berubah.
Urutan operator dalam ekspresi postfix berubah
sesuai dengan urutan operator mana yang diterapkan lebih dulu
Tanda kurung dari ekspresi infix menghilang di ekspresi postfix.

16
Patterns ini digunakan untuk membuat algoritma mengubah ekspresi
infix ke ekspresi postfix.
Stack dapat digunakan
untuk mengevaluasi ekspresi postfix
untuk mengubah ekspresi infix menjadi ekspresi postfix

17
Evaluasi Ekspresi Postfix
Siapkan sebuah stack kosong.
Scan ekspresi postfix dari kiri ke kanan, sampai habis
Jika token adalah sebuah operand,
Push ke dalam stack
Jika token adalah sebuah operator ,
Pop 1 operand, perlakukan sebagai operand kanan
Pop 1 operand lagi, perlakukan sebagai operator kiri
Evaluasi .
Push hasilnya ke dalam stack.
18
Contoh
Infix:
Postfix:

19
No Token Stack Operasi
1 Push
2 Push
3 Push
4 Push
5 Pop, Push
6 Pop, Push
7 Pop, Push

20
Infix to Postfix
Patterns
1 binary operator
Infix:
Postfix:
2 atau lebih binary operator
Left-to-right Associative (presedensi sama)
Infix:
Postfix:

21
Infix to Postfix
Patterns
2 atau lebih binary operator
Infix:
Postfix:

22
Infix to Postfix
Operator with higher precedence
Kita perlu helper functions

def prec(op1, op2):


''' Returns True if op1 has higher precedence than op2.
Returns False otherwise (including if op1 has equal precedence
with op2).
'''

if op1 in ['*', '/'] and op2 in ['+', '-']:


return True
else:
return False

23
Infix to Postfix
Presedensi lebih tinggi daripada
Infix:
Postfix:
Infix:
Postfix:

24
Infix to Postfix
Parentheses is considered have higher precedence

25
Infix to Postfix
Pseudocdoe

Baca setiap token dari ekspresi infix


Jika token tersebut merupakan operand, tampilkan di hasil luaran
(Bisa juga dimasukkan ke dalam Queue)
Jika elemen TOS memiliki precedensi lebih besar (lebih kuat) atau
sama dengan token:

26
Infix to Postfix
Baca setiap token...
Jika elemen TOS memiliki precedensi lebih besar...:
pop satu per satu, hingga elemen TOS memiliki presedensi lebih
kecil atau stack menjadi kosong.
Setiap elemen yang di-pop ditampilkan di hasil luaran (atau di-
enqueue).
push token operator ke dalam stack
(dequeue semua elemen dalam Queue)

27
Queue
Untuk apa saja?

1. Queue in Customer Service Centers


2. Print Spooling
3. Traffic Management Systems
4. Operating System Scheduling
5. Data Buffers in Networking
6. Algoritma Breadth First Search . Akan dibahas pada topik Graf.

28
7. Load Balancing in Web Servers
8. Real-Time Simulation Systems
9. Memory Management
10. Event-driven Programming (Pemrograman GUI)

29
Queue menggunakan Python’s
collections.deque
Struktur data collections bawaan
"list-like"
Zero-based indexing
Negative indexing
NOT Slicing!
Harus melakukan import (tidak seperti list)
from collections import deque

30
Double Ended Queue
Antrian
Ujung "kiri" dan "kanan"
"atas" dan "bawah"
"depan" dan "belakang"
Methods
append()

pop()

appendleft()

popleft()

31
from collections import deque

class Queue:
'''Implementasi tipe data Queue. Menggunakan collections.deque
sebagai fondasi.
Elemen baru di-enqueue ke sebelah kiri. Elemen di-dequeue dari sebelah kanan.

Mahasiswa mencari data eksperimen kompleksitas waktu untuk operasi


enqueue() dan dequeue(), lewat variasi append(), appendleft(),
pop(), dan popleft()
'''

32
def __init__(self):
self.items = deque()

def enqueue(self, item):


self.items.appendleft(item)

def dequeue(self):
if len(self.items) > 0:
return self.items.pop()
else:
return None

33
def isEmpty(self):
if len(self.items) > 0:
return False
else:
return True

def size(self):
pass

def __str__(self):
return str(self.items)

34

Anda mungkin juga menyukai