Stack adalah struktur data yang menggunakan konsep LIFO (Last In First Out) dimana elemen terakhir yang disimpan akan menjadi elemen pertama yang diambil. Stack dapat diimplementasikan menggunakan array dan struct yang berisi field untuk menyimpan elemen dan posisi ujung stack. Operasi dasar pada stack antara lain push untuk menambahkan elemen dan pop untuk mengambil elemen puncak.
2. Deskripsi stack
2
Salah satu konsep yang efektif untuk menyimpan
dan mengambil data adalah LIFO (Last In First Out)
dimana pengambilan data akan berkebalikan
urutannya dengan penyimpanan data.
Stack adalah kumpulan data dimana data yang
diletakkan di atas data yang lain. Stack adalah
struktur data yang menggunakan konsep LIFO.
Nurdiansah PTIK 09 UNM 10/12/2012
3. Cont‟…
3
Elemen terakhir yang disimpan dalam stack menjadi
elemen pertama yang diambil.
Dalam proses komputasi, untuk meletakkan sebuah
elemen pada bagian atas dari stack, maka kita
melakukan PUSH. Sebaliknya, untuk memindahkan
dari tempat yang di atas tersebut kita melakukan
POP.
Nurdiansah PTIK 09 UNM 10/12/2012
4. Contoh
4
Ada dua buah kotak yang Ilustrasi sebuah stack
kita tumpuk, sehingga kotak
diletakkan di atas kotak
yang lain. Jika kemudian
stack dua buah kotak
tersebut kita tambah dengan
kotak ketiga dan seterusnya,
maka akan kita peroleh
sebuah stack kotak, yang
terdiri dari N kotak.
Stack merupakan kumpulan
data yang bersifat dinamis
artinya bisa dilakukan
penambahan atau
pengambilan data darinya.
Nurdiansah PTIK 09 UNM 10/12/2012
5. Penyajian stack
5
Stack dapat diuraikan dengan menggunakan array,
dengan anggapan bahwa banyaknya elemen
maksimum dari stack tersebut tidak akan melebihi
batas maksimum banyaknya elemen dalam array.
Penambahan data pada stack harus dibatasi
berdasarkan ukuran stack untuk menghindari
overflow.
Perlu data tambahan untuk mencatat posisi ujung
stack.
Nurdiansah PTIK 09 UNM 10/12/2012
6. Cont‟…
6
Stack dapat disajikan dengan menggunakan tipe
data struktur (struct) yang terdiri dari dua field.
Field pertama bertipe array untuk menyimpan
elemen stack.
Field kedua bertipe integer untuk mencatat posisi
ujung stack.
Nurdiansah PTIK 09 UNM 10/12/2012
7. Deklarasi stack
7
#define MAXSTACK 100
typedef int ItemType;
/*defenisi struktur stack*/
typedef struct {
int Item[MAXSTAXK];
/*Array yang berisi data tumpukan*/
int Count;
/*menunjukkan indeks data paling atas dari stack */
} Stack;
Nurdiansah PTIK 09 UNM 10/12/2012
8. Operasi pada stack
8
Operasi-operasi dasar pada stack sbb :
1. Operasi menciptakan T sebagai stack kosong
void InitializeStack (Stack *S)
{
S -> Count = 0;
}
2. Fungsi yang melakukan pengecekan apakah stack dalam
kondisi kosong
int Empty(Stack *S)
{
return (S -> Count ==0);
}
Nurdiansah PTIK 09 UNM 10/12/2012
9. 3. Fungsi yang melakukan pengecekan apakah stack dalam kondisi
penuh
int Full (Stack *S)
{
return (S ->Count == MAXSTACK);
}
4. Operasi menyisipkan elemen x ke stack T dan mengembalikan stack
baru
void Push(ItemType x, Stack *S)
{
if (Full)
printf(“Stack penuh! Data tidak dapat masuk!”);
else
{
S -> Item[S-> Count] = x;
++ (S -> Count);
}
}
Nurdiansah PTIK 09 UNM 9 10/12/2012
10. Cont‟…
10
5. Operasi mengambil elemen puncak stack T, (pop(T,x))
void Pop (Stack *S, ItemType *x)
{
if (Empty)// stack kosong
printf (“Stack masih kosong!”);
else
{
-- (S -> Count);
* x = S -> Item [S -> Count];
S -> Item[S -> Count] = 0;
}
}
Nurdiansah PTIK 09 UNM 10/12/2012
11. Operasi Push
11
Fungsi tersebut menyiapkan tempat untuk x yang
akan dipush ke dalam tumpukan, yaitu dengan
menambah nilai S ->Count dengan 1 dan kemudian
menyisipkan x ke dalam S-> Item.
Cara memanggil prosedur di atas adalah sbb :
x=5;
Push(x, &tum);
Nurdiansah PTIK 09 UNM 10/12/2012
12. Operasi Pop
12
Operasi POP adalah operasi untuk menghapus
elemen yang terletak pada posisi paling atas dari
sebuah tumpukan.
Cara pemanggilan satu data prosedur POP adalah
sbb :
/*mengambil satu data dari tumpukan*/
hasil= pop (&tum);
printf(„Data %d hasil pengambilan dari
tumpukan : “, hasil);
Nurdiansah PTIK 09 UNM 10/12/2012
13. Notasi Infix
13
Notasi Infix adalah cara penulisan ungkapan dimana
operator ditulis di antara dua operand.
Contoh Notasi Infix : Penulisan ungkapan numeris
dimana tanda kurung digunakan untuk
mengelompokkan bagian mana yang akan dikerjakan
terlebih dahulu.
Contoh : (A+B) * (C-D)
Suku (A+B) akan dikerjakan terlebih dahulu,
kemudian suku (C-D), dan terakhir mengalikan hasil
yang diperoleh dari kedua suku tersebut
Nurdiansah PTIK 09 UNM 10/12/2012
14. Cont‟…
14
Bandingkan dengan ungkapan : A+B*C-D
Pada ungkapan ini B*C akan dikerjakan terlebih
dahulu, diikuti yang lain.
Dapat disimpulkan bahwa pemakaian tanda kurung
mempengaruhi hasil akhir.
Semakin rumit suatu ungkapan maka semakin
banyak dibutuhkan tanda kurung. Hal ini membawa
suatu konsekuensi bahwa penulisan tanda kurung
itupun harus benar-benar terhindar dari kesalahan.
Nurdiansah PTIK 09 UNM 10/12/2012
15. Notasi Polish (Prefix)
15
Dikembangkan oleh ahli matematika, Jan
Lukasiewicz.
Notasi Polish atau notasi prefix adalah penulisan
ungkapan dimana operator ditulis sebelum kedua
operand disajikan
Contoh :
A+B +AB
A+B-C -+ABC
(A+B)*(C-D) *+AB – CD
A-B/ (C*D^E) -A/B*C^DE
Nurdiansah PTIK 09 UNM 10/12/2012
16. Notasi Postfix (Suffix)
16
Dikenal juga dengan istilah notasi Polish Terbalik
(Reverse Polish Notation /RPN).
Pada notasi ini, operator ditulis sesudah operand.
Sama halnya dengan notasi prefix maka pada notasi
ini tidak diperlukan adanya tanda kurung
pengelompokan.
Nurdiansah PTIK 09 UNM 10/12/2012
17. Contoh
17
Ungkapan : (A+B) * (C-D)
(AB+)*(CD-)
dengan memisalkan (AB+) sebagai p dan (CD-)
sebagai q, maka dengan notasi postfix diperoleh :
AB +CD-*
Dalam hal ini penulisan operator menentukan
operasi mana yang harus dikerjakan terlebih
dahulu.
Nurdiansah PTIK 09 UNM 10/12/2012
18. Cont‟…
18
Contoh Lain :
A+B–C AB + C-
(A+B)*(C-D) AB + CD-*
A-B/(C*D^E) ABCDE^*/-
Nurdiansah PTIK 09 UNM 10/12/2012
19. Algoritma konversi infix ke postfix
19
1. Baca ungkapan dalam notasi infix, misalnya S
2. Tentukan panjang ungkapan tersebut, misalnya N
karakter
3. Siapkan sebuah stack kosong dan siapkan derajat
masing-masing operator, misalnya ^ berderajat 3,
* dan / berderajat 2, + dan – berderajat 1 dan (
berderajat 0.
4. Dimulai dari i = 1 sampai N kerjakan langkah-
langkah sebagai berikut :
Nurdiansah PTIK 09 UNM 10/12/2012
20. a. R = S[1]
b. Test nilai R. Jika R adalah :
operand : langsung ditulis
kurung buka : push ke dalam tumpukan
kurung tutup : pop dan tulis semua isi tumpukan
sampai ujung tumpukan =„(„. Pop juga tanda „(„ ini
tetapi tidak usah ditulis.
operator : jika tumpukan kosong atau derajat R
lebih tinggi dibanding derajat ujung tumpukan,
push operator ke dalam tumpukan. Jika tidak,
pop ujung tumpukan dan tulis. Kemudian ulangi
pembandingan R dengan ujung tumpukan.
Kemudian R di-push
Nurdiansah PTIK 09 UNM 20 10/12/2012
21. Cont‟…
21
c. Jika akhir notasi infix telah tercapai, dan tumpukan
masih belum kosong, pop semua isi tumpukan dan
tulis hasilnya
Contoh : (A+B)/ ((C-D) * E^F) -------notasi infix
menjadi
AB+CD-EF^*/ ------- notasi postfix
Nurdiansah PTIK 09 UNM 10/12/2012
22. Ilustrasi
22
Hasil Notasi
Karakter yang Karakter
Isi tumpukan Postfix yang
dibaca tercetak
terbentuk
( (
A ( A A
+ (+ A
B B AB
) + AB+
/ /
( /(
( /((
C /(( C AB+C
- /((-
D /((- D AB + CD
) /( - AB + CD -
Nurdiansah PTIK 09 UNM 10/12/2012
23. Cont‟…
23
* /(*
E /(* E AB + CD – E
^ /(*^ AB + CD – E
F /(*^ F AB + CD - EF
) /(* ^ AB + CD – EF ^
/( * AB + CD – EF ^ *
/
/ AB + CD – EF ^ *
/
Nurdiansah PTIK 09 UNM 10/12/2012
24. 24
TO BE CONTINUE…
Nurdiansah PTIK 09 UNM 10/12/2012