10. Stack = tumpukan
• Suatu susunan koleksi data dimana data dapat ditambahkan dan
dihapus selalu dilakukan pada bagian akhir data, yang disebut
dengan top of stack (TOS)
• Stack bersifat LIFO (Last In First Out)
• “Benda yang terakhir masuk ke dalam stack akan menjadi yang
pertama keluar dari stack
TV TV
VCD
Compo
TV
VCD
Compo
TV
VCD
Compo
11. Last In First Out
B
A
D
C
B
A
C
B
A
D
C
B
A
E
D
C
B
A
top
top
top
top
top
A
12. Stack Applications
• Real life
• Pile of books (tumpukan buku)
• Plate trays (tumpukan piring)
• More applications related to computer science
• Program execution stack (read more from your text)
• Evaluating expressions
13. Operasi Stack
• Push : digunakan untuk menambah item pada stack pada tumpukan paling atas
• Pop : digunakan untuk mengambil item pada stack pada tumpukan paling atas
• Clear : digunakan untuk mengosongkan stack
• IsEmpty : fungsi yang digunakan untuk mengecek apakah stack sudah kosong
• IsFull : fungsi yang digunakan untuk mengecek apakah stack sudah penuh
4
3
2
1
1
2
3
4
O
U
T
I
N
14. Stack with Array of Struct
• Definisikan Stack dengan menggunakan suatu
struct
• Definisikan konstanta MAX_STACK untuk
menyimpan maksimum isi stack
• Elemen struct Stack adalah array data dan top
untuk menandakan posisi data teratas
• Buatlah variabel tumpuk sebagai implementasi
dari struct Stack
• Deklarasikan operasi-operasi/function di atas
dan buat implemetasinya
15. Program Stack
• Contoh deklarasi MAX_STACK
#define MAX_STACK 10
• Contoh deklarasi STACK dengan struct dan
array data
typedef struct STACK{
int top;
int data[10];
};
• Deklarasi/buat variabel dari struct
STACK tumpuk;
16.
17.
18. Program Stack (2)
Inisialisasi Stack
• Pada mulanya isi top dengan -1, karena array
dalam bahasa C dimulai dari 0, yang berarti
bahwa data stack adalah KOSONG!
• Top adalah suatu variabel penanda dalam Stack
yang menunjukkan elemen teratas data Stack
sekarang. Top Of Stack akan selalu bergerak
hingga mencapai MAX of STACK yang
menyebabkan stack PENUH
20. Program Stack (3)
Fungsi IsFull
• Untuk memeriksa apakah stack sudah penuh?
• Dengan cara memeriksa top of stack, jika sudah sama dengan
MAX_STACK-1 maka full, jika belum (masih lebih kecil dari
MAX_STACK-1) maka belum full
22. Program Stack (5)
Fungsi IsEmpty
• Untuk memeriksa apakah data Stack masih kosong?
• Dengan cara memeriksa top of stack, jika masih -1
maka berarti data Stack masih kosong!
int isEmpty()
{return (tumpuk.top==-1) ? 1:0;}
23. Program Stack (6)
Fungsi Push
• Untuk memasukkan elemen ke data Stack. Data
yang diinputkan selalu menjadi elemen teratas
Stack (yang ditunjuk oleh ToS)
• Jika data belum penuh,
• Tambah satu (increment) nilai top of stack lebih
dahulu setiap kali ada penambahan ke dalam array
data Stack.
• Isikan data baru ke stack berdasarkan indeks top of
stack yang telah di-increment sebelumnya.
• Jika tidak, outputkan “Penuh”
25. Program Stack (8)
Fungsi Pop
• Untuk mengambil data Stack yang terletak paling
atas (data yang ditunjuk oleh TOS).
• Tampilkan terlebih dahulu nilai elemen teratas
stack dengan mengakses indeksnya sesuai dengan
top of stacknya, baru dilakukan di-decrement
nilai top of stacknya sehingga jumlah elemen
stack berkurang.
27. Program Stack (10)
• Fungsi Print
• Untuk menampilkan semua elemen-
elemen data Stack
• Dengan cara me-loop semua nilai
array secara terbalik, karena kita harus
mengakses dari indeks array tertinggi
terlebih dahulu baru ke indeks yang
lebih kecil!
30. Studi Kasus Stack
• Pembuatan Kalkulator SCIENTIFIC
• Misalkan operasi: 3 + 2 * 5
• Operasi di atas disebut notasi infiks,
notasi infiks tersebut harus diubah
lebih dahulu menjadi notas postfix
• 3 + 2 * 5 notasi postfiksnya adalah 3 2
5 * +
31. Studi Kasus Stack (2) – Infix to Postfix
• Baca soal dari depan ke belakang
• Jika berupa operand, maka masukkan ke posftix
• Jika berupa operator, maka:
• Jika stack masih kosong, push ke stack
• Jika derajat operator soal > derajat operator top of stack
• Push operator soal ke stack
• Selama derajat operator soal <= derajat operator top of stack
• Pop top of stack dan masukkan ke dalam posfix
• Setelah semua dilakukan, push operator soal ke stack
• Jika sudah semua soal dibaca, pop semua isi stack dan push ke postfix sesuai dengan
urutannya
3 + 2 * 5
stack
posftix
33. Contoh lain
• a+b*c-d
• Stack (kosong) dan Postfik (kosong)
• Scan a
• Postfik: a
• Scan +
• Stack: +
• Scan b
• Postfik: ab
• Scan *, karena ToS (+) < *, maka add ke Stack
• Stack: +*
34. Contoh• Scan c
• Postfik: abc
• Scan –, karena * > -, maka pop Stack, dan add ke Postfik
• Stack: +
• Postfik: abc*
• Karena + >= -, maka pop Stack, dan add ke Postfik, karena Stack
kosong, maka push – ke stack
• Stack: -
• Postfik: abc*+
• Scan d
• Postfik: abc*+d
• Karena sudah habis, push ToS stack ke Posfix
• Postfix: abc*+d-
35. Postfix Evaluator
• Scan Postfix string dari kiri kekanan.
• Siapkan sebuah stack kosong.
• Jika soal adalah operand, tambahkan ke stack. Jika
operator, maka pasti akan ada minimal 2 operand pada
stack
• Pop dua kali stack, pop pertama disimpan dalam y, dan pop
kedua ke dalam x. Lalu evaluasi x <operator> y. Simpan
hasilnya dan push ke dalam stack lagi.
• Ulangi hingga seluruh soal discan.
• Jika sudah semua, elemen terakhir pada stack adalah
hasilnya.
• Jika lebih dari satu elemen, berarti error!
38. Queue
What is the difference?
• Stack – a container that allows push and pop
• Queue - a container that allows enqueue and
dequeue
39. 39
• queue: A list with the restriction that insertions are done at
one end and deletions are done at the other
• First-In, First-Out ("FIFO”)
• Elements are stored in order of
insertion but don't have indexes.
• Client can only add to the end of the
queue, and can only examine/remove
the front of the queue.
• basic queue operations:
• add (enqueue): Add an element to the back.
• remove (dequeue): Remove the front element.
• peek: Examine the element at the front.
40. Queue Applications
• Real life examples
• Waiting in line
• Waiting on hold for tech support
• Applications related to Computer Science
• Threads
• Job scheduling (e.g. Round-Robin algorithm for CPU
allocation)
41. Queues in computer science
41
• Operating systems:
• queue of print jobs to send to the printer
• queue of programs / processes to be run
• queue of network data packets to send
• Programming:
• modeling a line of customers or clients
• storing a queue of computations to be performed in order
• Real world examples:
• people on an escalator or waiting in a line
• cars at a gas station (or on an assembly line)
42. Queue Linier Array
• Terdapat satu buah pintu masuk di suatu ujung dan satu buah
pintu keluar di ujung satunya
• Sehingga membutuhkan 2 variabel: Head dan Tail
43. Queue Dengan Array
• Bersifat FIFO (First In First Out)
• Elemen yang pertama masuk ke antrian akan keluar pertama
kalinya
• DEQUEUE adalah mengeluarkan satu elemen dari suatu
Antrian
• Antrian dapat dibuat dengan menggunakan: Liniear Array dan
Circular Array
45. The Queue Operations
A queue is like a line of
people waiting for a bank
teller. The queue has a front
and a rear.
$ $
Front
Rear
46. The Queue Operations
New people must enter the queue at the rear. it
is usually called an enqueue operation.
$ $
Front
Rear
47. The Queue Operations
When an item is taken from the queue, it always
comes from the front. it is usually called a
dequeue operation.
$ $
Front
Rear
48. 48
Queue
• Queue: First In First Out (FIFO)
• Toll Station
• Car comes, pays, leaves
• Check-out in Big Y market
• Customer comes, checks out and leaves
• More examples: Printer, Office Hours, …
ABCD OutputInput
49. 49
More Examples of Queue
• In our daily life
• Airport Security Check
• Cinema Ticket Office
• Bank, ATM
• Anything else ?
50. 50
What Is Queue
• Queue is an abstract data type
• Adding an entry at the rear
• Deleting an entry at the front
frontfrontrearrear
AddingAdding
DeletingDeleting
ABC
51. 51
Abstract Data Types
• Queue
• Operating on both ends
• Operations: EnQueue(in), DeQueue(out)
frontfrontrearrear
enqueueenqueue
dequeuedequeue
ABC
52. 52
Queue
Queue is FIFO ( First-In First-Out)
A queue is open at two ends. You can only add entry
(enqueue) at the rear , and delete entry (dequeue) at the
front.
Note that you cannot add/extract entry in the middle of the
queue.
53. 53
Applications of Queue
• Printing Job Management
• Packet Forwarding in Routers
• Message queue in Windows
• I/O buffer
54. 54
Printing Job Management
• Many users send their printing jobs to a public printer
• Printer will put them into a queue according to the arrival
time and print the jobs one by one
• These printing documents are A.doc, B.doc, C.doc and
D.doc
55. 55
Printing Queue
Now printing A.doc
A.doc is finished. Now printing B.doc
Now still printing B.docD.doc comes
• A.doc B.doc C.doc arrive to printer.
ABC
BC
BCD
CD
D
B.doc is finished. Now printing C.doc
C.doc is finished. Now printing D.doc
56. 56
First-in First-out (FIFO)
When we enqueue
entries in the queue and
then dequeue them one
by one, we will get the
items in the same order.
When we enqueue
entries in the queue and
then dequeue them one
by one, we will get the
items in the same order.
The first one
enqueued is the first
one dequeued.
(FIFO)
The first one
enqueued is the first
one dequeued.
(FIFO)
ABC
A
AB
BC
C
A, B, C come in
A, B, C come out
65. Queue (4)
• IsEmpty()
• Untuk memeriksa apakah Antrian sudah penuh atau
belum
• Dengan cara memeriksa nilai Tail, jika Tail = -1 maka
empty
• Kita tidak memeriksa Head, karena Head adalah tanda
untuk kepala antrian (elemen pertama dalam antrian)
yang tidak akan berubah-ubah
• Pergerakan pada Antrian terjadi dengan penambahan
elemen Antrian kebelakang, yaitu menggunakan nilai
Tail
67. Queue (6)
Fungis IsFull
• Untuk mengecek apakah Antrian sudah penuh
atau belum
• Dengan cara mengecek nilai Tail, jika Tail >=
MAX-1 (karena MAX-1 adalah batas elemen
array pada C) berarti sudah penuh
68.
69. Queue (7)
Enqueue
• Untuk menambahkan elemen ke dalam Antrian,
penambahan elemen selalu ditambahkan di elemen paling
belakang
• Penambahan elemen selalu menggerakan variabel Tail
dengan cara increment counter Tail terlebih dahulu
71. Queue (9)
• Dequeue()
• Digunakan untuk menghapus elemen terdepan/pertama
(head) dari Antrian
• Dengan cara menggeser semua elemen antrian kedepan
dan mengurangi Tail dgn 1
• Penggeseran dilakukan dengan menggunakan looping
73. Queue (11)
• Clear()
• Untuk menghapus elemen-elemen Antrian dengan cara
membuat Tail dan Head = -1
• Penghapusan elemen-elemen Antrian sebenarnya tidak
menghapus arraynya, namun hanya mengeset indeks
pengaksesan-nya ke nilai -1 sehingga elemen-elemen
Antrian tidak lagi terbaca
75. Queue (13)
• Tampil()
• Untuk menampilkan nilai-nilai elemen Antrian
• Menggunakan looping dari head s/d tail
76. Soal
• Tambahkanlah function untuk mencari suatu
elemen dalam queue & stack
• Tambahkan function untuk mengedit suatu
elemen dalam queue & stack
• Carilah nilai total, rata-rata, terbesar dan
terkecil dari elemen-elemen queue dalam
function tersendiri
NEXT : Pengenalan Pointer dan Function by Ref.
Editor's Notes
When you think of a computer science queue, you can imagine a line of people waiting for a teller in a bank. The line has a front (the next person to be served) and a rear (the last person to arrive.
Don’t ask me why the C++ STL used the name push. It only confuses matters with a stack. In any case, when a new item enters a queue, it does so at the rear.
When an item is removed from a queue, the removal occurs at the front.