Anda di halaman 1dari 20

Stack (Tumpukan)

Tim Pengajar IF2030

10/28/2009

FNA+MLK/IF2030

Stack
Stack: list linier yang:
dikenali elemen puncaknya (TOP)
aturan penyisipan dan penghapusan elemennya
tertentu:
Penyisipan selalu dilakukan "di atas" TOP
Penghapusan selalu dilakukan pada TOP

TOP adalah satu-satunya alamat tempat terjadi


operasi
Elemen Stack tersusun secara LIFO (Last In
First Out)
10/28/2009

FNA+MLK/IF2030

Stack
TOP
TOP

BOTTOM

BOTTOM

Dengan definisi semacam ini, representasi tabel


sangat tepat untuk mewakili Stack, karena
operasi penambahan dan pengurangan hanya
dilakukan di salah satu ujung tabel
10/28/2009

FNA+MLK/IF2030

Pemakaian Stack

Pemanggilan prosedur
Perhitungan ekspresi aritmatika
Rekursifitas
Backtracking
dan algoritma lanjut yang lain

10/28/2009

FNA+MLK/IF2030

Definisi Fungsional
Jika diberikan S adalah Stack dengan elemen
ElmtS:
CreateEmpty
IsEmpty
IsFull
Push
Pop

10/28/2009

:S
: S boolean

{ Membuat sebuah stack kosong}


{ Test stack kosong, true jika stack kosong,
false jika S tidak kosong }
: S boolean
{ Test stack penuh, true jika stack penuh,
false jika S tidak }
: ElmtS x S S { Menambahkan sebuah elemen ElmtS
sebagai TOP, TOP berubah nilainya }
: S S x ElmtS { Mengambil nilai elemen TOP,
sehingga TOP yang baru adalah elemen
yang datang sebelum elemen TOP,
mungkin S menjadi kosong }

FNA+MLK/IF2030

Definisi Fungsional
Definisi Selektor:
Jika S adalah sebuah Stack, maka
Top(S) adalah alamat elemen TOP, di mana
operasi penyisipan/penghapusan dilakukan
InfoTop(S) adalah informasi yang disimpan pada
Top(S)

Definisi Stack kosong adalah Stack


dengan Top(S)=Nil (tidak terdefinisi)

10/28/2009

FNA+MLK/IF2030

Implementasi Stack dengan Tabel


Ilustrasi Stack tidak kosong, dengan 5 elemen:

Ilustrasi Stack kosong

10/28/2009

FNA+MLK/IF2030

ADT Stack dalam Bahasa C


(dengan array eksplisit-statik)
/* File : stackt.h */
/* Implementasi Stack dalam bahasa C dengan alokasi statik */
#ifndef stackt_H
#define stackt_H
#include "boolean.h"
#define Nil 0 /* Nil adalah stack dengan elemen kosong */
#define MaxEl 10
typedef int infotype;
typedef int address;
/* indeks tabel */
/* Versi I : dengan menyimpan tabel dan alamat top secara eksplisit */
typedef struct { infotype T[MaxEl+1]; /* tabel penyimpan elemen */
address TOP;
/* alamat TOP: elemen puncak */
} Stack;
/* Definisi akses dengan Selektor : */
#define Top(S) (S).TOP
#define InfoTop(S) (S).T[(S).TOP]
10/28/2009

FNA+MLK/IF2030

ADT Stack dalam Bahasa C


(dengan array eksplisit-statik)
/*** Konstruktor/Kreator ***/
void CreateEmpty(Stack *S);
/* I.S. Sembarang */
/* F.S. Membuat sebuah stack S yang kosong berkapasitas MaxEl */
/* jadi indeksnya antara 1..MaxEl karena 0 tidak dipakai */
/* Ciri stack kosong : TOP bernilai Nil */
/********** Predikat Untuk test keadaan KOLEKSI **********/
boolean IsEmpty (Stack S);
/* Mengirim true jika Stack kosong: lihat definisi di atas */
boolean IsFull(Stack S);
/* Mengirim true jika tabel penampung nilai elemen stack penuh */
/*********** Menambahkan sebuah elemen ke Stack **********/
void Push (Stack *S, infotype X);
/* Menambahkan X sebagai elemen Stack S. */
/* I.S. S mungkin kosong, tabel penampung elemen stack TIDAK penuh */
/* F.S. X menjadi TOP yang baru,TOP bertambah 1 */
/*********** Menghapus sebuah elemen Stack **********/
void Pop (Stack *S, infotype *X);
/* Menghapus X dari Stack S. */
/* I.S. S tidak mungkin kosong */
/* F.S. X adalah nilai elemen TOP yang lama, TOP berkurang 1 */
#endif
10/28/2009
FNA+MLK/IF2030

ADT Stack dalam Bahasa C


(dengan array eksplisit-statik)
void CreateEmpty(Stack *S)
/* I.S. Sembarang */
/* F.S. Membuat sebuah stack S yang kosong berkapasitas MaxEl */
/* jadi indeksnya antara 1.. MaxEl karena 0 tidak dipakai */
/* Ciri stack kosong : TOP bernilai Nil */
{ /* Kamus Lokal */
/* Algoritma */
Top(*S) = Nil;
}

10/28/2009

FNA+MLK/IF2030

10

ADT Stack dalam Bahasa C


(dengan array eksplisit-statik)
boolean IsEmpty (Stack S)
/* Mengirim true jika Stack kosong: lihat definisi di atas */
{ /* Kamus Lokal */
/* Algoritma */
return (Top(S)==Nil);
}
boolean IsFull(Stack S)
/* Mengirim true jika tabel penampung nilai elemen stack penuh */
{ /* Kamus Lokal */
/* Algoritma */
return(Top(S)==MaxEl);
}

10/28/2009

FNA+MLK/IF2030

11

ADT Stack dalam Bahasa C


(dengan array eksplisit-statik)
void Push (Stack *S, infotype X)
/* Menambahkan X sebagai elemen Stack S. */
/* I.S. S mungkin kosong, tabel penampung elemen stack TIDAK penuh */
/* F.S. X menjadi TOP yang baru, TOP bertambah 1 */
{ /* Kamus Lokal */
/* Algoritma */
Top(*S)++;
InfoTop(*S) = X;
}

10/28/2009

FNA+MLK/IF2030

12

ADT Stack dalam Bahasa C


(dengan array eksplisit-statik)
void Pop (Stack *S, infotype *X);
/* Menghapus X dari Stack S. */
/* I.S. S tidak mungkin kosong */
/* F.S. X adalah nilai elemen TOP yang lama, TOP berkurang 1 */
{ /* Kamus Lokal */
/* Algoritma */
*X = InfoTop(*S);
Top(*S)--;
}

10/28/2009

FNA+MLK/IF2030

13

ADT Stack dalam Bahasa C


(dengan array eksplisit-dinamik)
Diktat Struktur Data hlm. 46

10/28/2009

FNA+MLK/IF2030

14

Contoh Aplikasi Stack


Evaluasi ekspresi matematika yang ditulis
dengan notasi POLISH (Postfix)
Diktat Struktur Data hlm. 48
Latihan: Implementasikan dalam Bahasa C

10/28/2009

FNA+MLK/IF2030

15

Kasus: Evaluasi Ekspresi


Matematika
Ekspresi ditulis dalam notasi postfix
Operator: *,/,+,-,^
Contoh:
A B * C / (A*B)/C
A B C ^ / D E * + A C * - (A/(B^C))+(D*E)(A*C)

Token: kata yang mewakili operan atau


operator
10/28/2009

FNA+MLK/IF2030

16

Program Ekspresi (hal 48)


AB*C/

Stack S

FirstToken
CT=A
EndToken=false
Operator(CT)=false

Push(S,CT)

AB*C/
NextToken
CT=B
EndToken=false
10/28/2009
Operator(CT)=false

Push(S,CT)
FNA+MLK/IF2030

TOP

Stack S

B
A

TOP
17

Program Ekspresi (lanjutan)


Stack S

AB*C/
B
A
Stack S

TOP

Pop(S,Op2)
Pop(S,Op1)
Push(S, Hitung(Op1,Op2,CT))

NextToken
CT=*
EndToken=false
Operator(CT)=true

=A*B

AB*C/
C
=A*B
Stack
S
10/28/2009

NextToken

CT=/
EndToken=false
Operator(CT)=true

TOP

Stack S

Push(S,CT)
FNA+MLK/IF2030

=A*B/C

TOP

18

ABC^/DE*+AC*- ?

=B^C

D
=A/ (B^C)

=A/ B^C

E
D

=D*E

=A/ B^C

=A/ B^C

=A/ B^C+D*E

=A/ B^C+D*E

C
A

=A*C

=A/ B^C+D*E

=A/ B^C+D*E

10/28/2009

=A/ B^C+D*E- A*C

FNA+MLK/IF2030

19

PR
Modul pra-praktikum:
P-08.Stack
Bagian 1. Representasi Tabel Kontigu dengan
Alokasi Memori Statik
Bagian 2. Representasi Tabel Kontigu dengan
Alokasi Memori Dinamik

10/28/2009

FNA+MLK/IF2030

20

Anda mungkin juga menyukai