Anda di halaman 1dari 66

STACK (TUMPUKAN)

1
PENGERTIAN STACK
Secara sederhana diartikan dengan :
 sebagai tumpukan dari benda
 sekumpulan data yang seolah-olah diletakkan di atas data yang
lain
 koleksi dari objek-objek homogen
 Suatu urutan elemen yang elemennya dapat diambil dan
ditambah hanya pada posisi akhir (top) saja
 Metode / teknik dalam menyimpan atau mengambil data ke
dan dari memori.

2
Ilustrasi Stack
 Terdapat dua buah kotak yang ditumpuk, kotak yang satu
akan ditumpuk diatas kotak yang lainnya. Jika kemudian stack
2 kotak tadi, ditambah kotak ketiga, keempat, kelima, dan
seterusnya, maka akan diperoleh sebuah stack kotak yang
terdiri dari N kotak.

3
Ilustrasi Stack - Contoh.

4
Kaidah Stack (tumpukan)

• Stack bersifat LIFO (Last In First Out)


• Benda yang terakhir masuk ke dalam stack akan
menjadi yang pertama keluar dari stack

5
Cara kerja Stack
 Stack umumnya digunakan untuk menyimpan nilai data
/ekspresi matematis.
 Selain menyimpan & mengambil data, stack juga memeriksa
apakah ekspresi matematis yg dimasukkan sesuai dgn kaidah
penulisan ekspresi matematis atau belum, misal kurang 1
tanda kurung, tanda operasi yg lbh dsb.
 Misal akan dimasukkan data berturut2 “R”, “O”,”M”,”A”
kedalam stack.
 Langkah 1 : komputer akan melakukan pembuatan (create)
stack, misal untuk 4 lokasi memori
CREATE (S)

6
Maka proses memasukkan elemen data secara berturut2
adalah sbb:

Masukkan “R” kedlm stack Masukkan “O” kedlm


Posisi awal
PUSH (“R”,”S”) stack PUSH (“O”,”S”)

1003 1003
1005
1002 1002
1003
1001 Top O 1001
1001
Top=bottom R 1000 bottom R 1000
1000
S Alamat Alamat
S Alamat S

7
Lanjut:

Masukkan “M” kedlm Masukkan “A” kedlm stack Masukkan “N” kedlm
stack PUSH (“M”,”S”) PUSH (“A”,”S”) stack PUSH (“N”,”S”)

1003 Top A 1003 Top A 1003


Top M 1002 M 1002 M 1002
O 1001 O 1001 O 1001
bottom R 1000 bottom R 1000 bottom R 1000

S Alamat S Alamat S Alamat

Krn lokasi memori yg disiapkan hanya 4,


maka elemen data N tdk dpt masukkan.
Kesalahan macam ini disebt overflow eror

8
Selanjutnya,mengeluarkan isi seluruh stack dengan
cara:
Keluarkan 1 isi stack Keluarkan 1 isi stack Keluarkan 1 isi stack
POP (S) POP (S) POP (S)

1003 1003 1003


Top M 1002 1002 1002
O 1001 Top O 1001 1001
bottom R 1000 bottom R 1000 Top= R 1000
Alamat Alamat bottom
S S S Alamat

Hasil Hasil Hasil


“A” “A”,”M” “A”,”M”,”O”

9
Lanjut:

Keluarkan 1 isi stack


POP (S) Operasi ini tdk dp dilakukan krn stack sdh
dlm keadaan kosong. Kesalahan semacam
ini disbt dgn underflow error

1003
1002
1001
1000

S Alamat

Hasil
“A”,”M”,”O”,”R”

10
 Dari contoh diatas, perintah/operasi yg ada pada stack
adalah :
a. CREATE : untuk menciptakan suatu stack
b. PUSH : untuk memasukkan elemen data kedlm stack
c. POP : untuk mengeluarkan elemen data dari dlm stack

 Berikut adalah Operasi2 yg digunakan dalam stack

11
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

12
APLIKASI STACK
 Penggunaan ADT dalam tumpukan
digunakan untuk mengevaluasi ekspresi
matematika yg sering dijumpai dlm kode2
pemrograman.

13
Tumpukan & Evaluasi Ekspresi
 Ekspresi matematis seperti A+B*C yang sering digunakan
dikategorikan sebagai notasi infix dimana operator berada
diantara operand.
 Operator adalah lambang operasi matematis
 Operand adalah nilai data atau variabel penampung nilai data.
 Tidak selamanya ekspresi matematis disimpan secara infix di
komputer. Ada yang menyimpan ekspresi tersebut secara
Postfix

14
Ekspresi postfix
 Postfix adalah metode penulisan ekspresi matematis yang
operatornya berada dibelakang operandnya.
 Contoh:
Ekspresi Infix Ekspresi Postfix
A+B AB+
A+B*C ABC*+
(A + B ) * C AB+C*
A*B+C AB*C+

Perhatikan bahwa pada Notasi Postfix tidak ada tanda kurung

15
Bukti bahwa notasi infix A * B + C akan menjadi A
B * C + pada notasi Postfix
1. Pada A * B + C maka operasi pertama yang dilakukan
adalah A * B
2. Jika A * B dimisalkan D, maka akan menjadi D + C
3. Penulisan notasi postfix untuk D + C adalah D C +
4. Sedangkan D adalah A * B, yang notasi postfixnya adalah A
B*
5. Sehingga notasi postfix lengkapnya adalah A B * C +
Catatan: Jadi pernyataan “ A ditambah “B dalam notasi
infix menjadi “ A dan “B ditambahkan pada Notasi
Postfix

16
 Persamaan postfix kalau dilakukan proses pembacaan
dari kiri ke kanan, maka operand2 akan ditemukan
sebelum operator2 yg sesuai.
 Proses pembacaan postfix yg paling mudah adalah dgn
menggunakan tumpukan
 Persamaan postfix ditelusuri dr kiri ke kanan dan
setiap waktu operand dijumpai.
 Postfix diaplikasikan pada 2 operand terakhir yg
masuk ke tumpukan (yg sebelumnya dikeluarkan
terlebih dahulu/pop), selanjutnya hasil dr operasi
dimasukkan/push ke tumpukan.

17
Contoh : persamaan postfix 4 8 7 3 + * 2 / +

 dievaluasi dgn cara : 4 operan dimasukan kedlm tumpukan sesuai


urutan yg dijumpai dr kiri ke kanan, seperti gambar berkut:

TOS 3
7
8
4

18
 Selanujutnya tanda + dibaca shg 2 elemen teratas dikeluarkan dan
hasilnya adalah (hasil penjumlahan 2 operan tersbt) sebesar 10,
dimasukkan kembali ke tumpukan , shg menghasilkan gambar
berikut:

TOS 10
8
4

19
 Simbol yg kemudian dibaca adalah operan *, maka 10 & 8
dikeluarkan dr tumpukan dan dihitung, kemudian hasilnya 80
dimasukkan kembali ke tumpukan shg tumpukan dpt dilukiskan
sebagai berikut:

80
TOS
4

20
 Berikut nilai 2 dimasukan kedlm tumpukan:

2
TOS
80
4

 Kemudian dijumpai operan / maka 80 & 2 dikeluarkan dan


keduanya dilakukan pembagian, shg hasilya adalah 40, yg
kemudian dimasukan kembali ke tumpukan.

21
 Sehingg hasilnya adalah :

40
TOS
4

 Terakhir operan + dijumpai sehg 4 & 40 dikeluarkan & dilakukan


proses penjumlahan, sehingga hasilnya adalah 44.

22
 Maka hasil tersebut dimasukkan kembali kedlm tumpukan.

TOS 44

S
 Sebagai kesimpulan bahwa persamaan postfix mudah untuk
dievaluasi karen aturan yg mendahului harus diaplikasikan
selama evauasi. Hal yg sama tdk bisa dilakukan dalam ekspresi
infiks.
 Yg menjadi permasalahan adalah bagamana melakukan konversi
notasi infix ke postfix.

23
Konversi infix ke postfix
 Proses konversi yg yg dimaksud adalah bagaimana
menerima persamaan infix sebagai masukan,
kemudian menghasilkan persamaan postfix
sebagai keluaran.
 Bentuk umum yg digunakan adalah tumpukan
untuk menyimpan operan yg dijumpai dan
mengeluarkan operan yg mengikuti apa yg
menjadi pendahulunya.

24
Secara spesifik, ekspresi infix ditelusuri dr kiri ke kanan &
memprosesnya mengikuti aturan dibawah ini:

 Kapan pun opran dijumpai, ia dilewatkan sebagai keluaran


 Setiap kali operator dibaca, operator tersbt dimasukan ke
tumpukan & operan dilewatkan sbgi keluaran, shg operator yg
dicapai memiliki nilai pendahului yg lbh rendah dr operator yg
terakhir dibaca.operator yg terakhir kali dibaca kemudian
dmasukan ke tumpukan
 Saat akhir dr persamaan infix dijumpai semua simbol yg ada pada
tumpukan dikeluarkan satu persatu & dilewatkan sebagai
keluaran.
 Tanda kurung buka dibolehkan masuk dlm tumpukan ttp tanda
kurung tutup tdk diijinkan.

25
Notasi Infix Prefix
Cara penulisan ungkapan yaitu dengan menggunakan notasi infix, yang artinya operator
ditulis diantara 2 operator.

Seorang ahli matematika bernama Jan Lukasiewiccz mengembangkan suatu cara penulisan
ungkapan numeris yang disebut prefix, yang artinya operator ditulis sebelum kedua
operand yang akan disajikan.
Contoh :

Proses konversi Infix Prefix


dari infix ke prefix : A+B +AB
= (A + B ) * ( C – D ) A+B–C -+ABC
= [ +A B ] * [ - C D ] (A+B)*(C–D) *+AB–CD
= * [ +A B ] [ - C D ]
= * +A B - C D

26
Notasi Infix Postfix
Cara penulisan ungkapan yaitu dengan menggunakan notasi postfix, yang
artinya operator ditulis sesudah operand.
Contoh :

Proses konversi
dari infix ke postfix : Infix Postfix
=(6-2)*(5+4) 16 / 2 16 2 /
=[62-]*[54+]
( 2 + 14 ) * 5 2 14 + 5 *
=[62-][54+]*
=62-54+* 2 + 14 * 5 2 14 5 * +
(6–2)*(5+4) 62–54+*

27
Contoh:
Penggunaan notasi postfix dalam stack, misal :
2 14 + 5 * = 80

push 2 pop 14 push 5 pop 5 pop 80


push 14 pop 2 pop 16
push 2 + push 16
14 *5

14 5
2 16 16 80
28
Stack with Array of Struct
 Definisikan Stack dengan menggunakan struct
 Definisikan konstanta MAX_STACK untuk menyimpan
maksimum isi stack
 Buatlah variabel array data sebagai implementasi stack
 Deklarasikan operasi-operasi/function di atas dan buat
implemetasinya
Program Stack
 Deklarasi MAX_STACK
#define MAX_STACK 10
 Deklarasi STACK dengan struct dan array data
typedef struct STACK{
int top;
char data[10][10];
};
 Deklarasi/buat variabel dari struct
STACK tumpuk;
Program Stack
Inisialisasi Stack
 Pada mulanya isi top dengan -1, karena array dalam C
dimulai dari 0, yang berarti stack adalah KOSONG!
 Top adalah suatu variabel penanda dalam STACK yang
menunjukkan elemen teratas Stack sekarang. Top Of
Stack akan selalu bergerak hingga mencapai MAX of
STACK sehingga menyebabkan stack PENUH!
Program Stack

Ilustrasi Stack pada saat inisialisasi!


Program Stack

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
Program Stack

 Ilustrasi Stack pada kondisi Full


Program Stack
Fungsi IsEmpty
 Untuk memeriksa apakah stack masih kosong?
 Dengan cara memeriksa top of stack, jika masih -1 maka berarti
stack masih kosong!
Program Stack
Fungsi Push
 Untuk memasukkan elemen ke stack, selalu menjadi elemen
teratas stack (yang ditunjuk oleh TOS)
 Tambah satu (increment) nilai top of stack lebih dahulu setiap kali
ada penambahan elemen stack.
 Asalkan stack masih belum penuh, isikan data baru ke stack
berdasarkan indeks top of stack setelah diincrement sebelumnya.
Program Stack
Program Stack
Fungsi Pop
 Untuk mengambil elemen teratas (data yang ditunjuk
oleh TOS) dari stack.
 Ambil dahulu nilai elemen teratas stack dengan
mengakses top of stack, tampilkan nilai yang akan dipop,
baru dilakukan decrement nilai top of stack sehingga
jumlah elemen stack berkurang
Program Stack
Program Stack
 Fungsi Print
 Untuk menampilkan semua elemen-elemen stack
 Dengan cara looping semua nilai array secara terbalik, karena
kita harus mengakses dari indeks array tertinggi terlebih
dahulu baru ke indeks yang kecil!
Program Stack
OPERASI PADA STACK – Cont.
 Operasi Push

 void Push (NOD **T, char item)


 {
 NOD *n;
 n=NodBaru (item);
 n->next=*T;
 *T=n;
 }
42
OPERASI PADA STACK – Cont.
 Operasi Pop

 char Pop (NOD **T)


 {
 NOD *n; char item;
 if (!StackKosong(*T)) {
 P=*T;
 *T=(*T)->next;
 item=P->data;
 free(P);
 }
 return item;
 }

43
OPERASI PADA STACK
1. buat stack (stack) - create
 membuat sebuah stack baru yang masih kosong
 spesifikasi:
 tujuan : mendefinisikan stack yang kosong
 input : stack
 syarat awal : tidak ada
 output stack : - (kosong)
 syarat akhir : stack dalam keadaan kosong

44
45
OPERASI PADA STACK – Cont.
2. stack kosong (stack) - empty
 fungsi untuk menentukan apakah stack dalam keadaan
kosong atau tidak
 spesifikasi:
 tujuan : mengecek apakah stack dalam keadaan kosong
 input : stack
 syarat awal : tidak ada
 output : boolean
 syarat akhir : stack kosong bernilai true jika stack dalam
keadaan kosong

46
OPERASI PADA STACK – Cont.
3. stack penuh (stack) - full
 fungsi untuk memeriksa apakah stack yang ada sudah
penuh
 spesifikasi:
 tujuan : mengecek apakah stack dalam keadaan penuh
 input : stack
 syarat awal : tidak ada
 output : boolean
 syarat akhir : stack penuh bernilai true jika stack dalam
keadaan penuh

47
OPERASI PADA STACK – Cont.
4. push (stack, info baru)
 menambahkan sebuah elemen kedalam stack.
 spesifikasi:
 tujuan : menambahkan elemen, info baru pada stack pada
posisi paling atas
 input : stack dan Info baru
 syarat awal : stack tidak penuh
 output : stack
 syarat akhir : stack bertambah satu elemen

48
OPERASI PADA STACK – Cont.
5. pop (stack, info pop)
 mengambil elemen teratas dari stack
 spesifikasi:
 tujuan : mengeluarkan elemen dari stack yang berada pada
posisi paling atas
 input : stack
 syarat awal : stack tidak kosong
 output : stack dalam info pop
 syarat akhir : stack berkurang satu elemen

49
Contoh
Sebagai contoh, misalkah ada data sebagai
berikut : 1 3 5 6, maka data tersebut dapat
tersimpan dalam bentuk sebagai berikut :

50
Contoh
 Contoh lain adalah ada sekumpulan perintah stack yaitu push(5),
push(7), pop, push(3), pop. Jika dijalankan, maka yang akan
terjadi adalah :

51
Representasi stack dalam pemrograman

1. Representasi stack dengan array


2. Representasi stack dengan single linked list
 Sebagai contoh representasi kedua cara tersebut dengan
operasi yang dilakukan adalah push(1), push(2), pop, push(5),
push(8), pos. Untuk lebih detail, perhatikan gambar di bawah
ini :

52
53
54
Pendeklarasian stack
 Proses pendeklarasian stack adalah proses
pembuatan struktur stack dalam memori.
Karena stack dapat direpresentasikan dalam
2 cara, maka pendeklarasian stack pun ada 2
yaitu :
a. Pendeklarasian stack yang menggunakan
array.

55
Sambungan
 Suatu stack memiliki beberapa bagian yaitu
 top yang menunjuk posisi data terakhir
(top)
 elemen yang berisi data yang ada dalam
stack. Bagian ini lah yang berbentuk array.
 maks_elemen yaitu variable yang
menunjuk maksimal banyaknya elemen
dalam stack.

56
Sambungan
 Dalam bahasa C, pendeklarasiannya adalah :
 #define maks 100
 //pendeklarasian struktur stack
 struct tstack{
 int top;
 int maks_elemen;
 int elemen[maks];
 };
 //pendeklarasian stack
 tstack stack;

57
Pendeklarasian stack yang menggunakan
single linked list
 Adapun stack yang menggunakan single
linked list, hanya memerlukan suatu pointer
yang menunjuk ke data terakhir. Setiap
elemen linked list mempunyai 2 field yaitu
elemen datanya dan pointer bawah yang
menunjuk posisi terakhir sebelum proses
push.

58
59
Inisialisasi stack
 adalah proses pembuatan suatu stack kosong
a. Inisialisasi stack yang menggunakan array. Proses
inisialisasi untuk stack yang menggunakan array
adalah dengan mengisi nilai field top dengan 0 (nol)
jika elemen pertama diawali dengan nomor 1. Kalau
elemen pertama array dimulai dengan 0 (contoh
bahasa C), maka top diisi dengan nilai -1.

60
Sambungan
 Implementasinya dalam bahasa C adalah :
 void inisialisasi(tstack *stack)
 {
 stack->top=-1;//karena dalam C array dimulai dgn 0
 stack->maks_elemen=maks;
 }
 Cara pemanggilannya adalah
 inisialisasi(&stack);

61
b. Inisialisasi stack yang menggunakan single linked list Proses
inisialisasi untuk stack yang menggunakan single linked list adalah
dengan mengisi nilai pointer stack dengan NULL.
 Implementasi dalam bahasa C adalah :
 void inisialisasi(PStack *stack)
 {
 *stack=NULL;
 }
 Cara pemanggilannya adalah :
 inisialisasi(&stack);

62
CONTOH PEMANFAATAN STACK

63
64
65
Contoh :

66

Anda mungkin juga menyukai