Upload
ical-militanmannojack
View
292
Download
2
Embed Size (px)
Citation preview
Stack
10/12/2012
1
Nurdiansah PTIK 09 UNM
Deskripsi stack
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.
10/12/2012
2
Nurdiansah PTIK 09 UNM
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.
Cont‟…
10/12/2012
3
Nurdiansah PTIK 09 UNM
Contoh
Ada dua buah kotak yang 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.
Ilustrasi sebuah stack
10/12/2012
4
Nurdiansah PTIK 09 UNM
Penyajian stack
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.
10/12/2012
5
Nurdiansah PTIK 09 UNM
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.
Cont‟…
10/12/2012
6
Nurdiansah PTIK 09 UNM
Deklarasi stack
#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;
10/12/2012
7
Nurdiansah PTIK 09 UNM
Operasi pada stack
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);
}
10/12/2012
8
Nurdiansah PTIK 09 UNM
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);
}}
10/12/20129Nurdiansah PTIK 09 UNM
5. Operasi mengambil elemen puncak stack T, (pop(T,x))void Pop (Stack *S, ItemType *x){
if (Empty)// stack kosongprintf (“Stack masih kosong!”);
else{
-- (S -> Count);* x = S -> Item [S -> Count];S -> Item[S -> Count] = 0;
}}
Cont‟…
10/12/2012
10
Nurdiansah PTIK 09 UNM
Operasi Push
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);
10/12/2012
11
Nurdiansah PTIK 09 UNM
Operasi Pop
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);
10/12/2012
12
Nurdiansah PTIK 09 UNM
Notasi Infix
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
10/12/2012
13
Nurdiansah PTIK 09 UNM
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.
Cont‟…
10/12/2012
14
Nurdiansah PTIK 09 UNM
Notasi Polish (Prefix)
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
10/12/2012
15
Nurdiansah PTIK 09 UNM
Notasi Postfix (Suffix)
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.
10/12/2012
16
Nurdiansah PTIK 09 UNM
Contoh
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.
10/12/2012
17
Nurdiansah PTIK 09 UNM
Contoh Lain :
A + B – C AB + C-
(A+B)*(C-D) AB + CD-*
A-B/(C*D^E) ABCDE^*/-
Cont‟…
10/12/2012
18
Nurdiansah PTIK 09 UNM
Algoritma konversi infix ke postfix
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 :
10/12/2012
19
Nurdiansah PTIK 09 UNM
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
10/12/201220Nurdiansah PTIK 09 UNM
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
Cont‟…
10/12/2012
21
Nurdiansah PTIK 09 UNM
Ilustrasi
Karakter yang dibaca
Isi tumpukanKarakter tercetak
Hasil Notasi Postfix yang
terbentuk
( (
A ( A A
+ (+ A
B B AB
) + AB+
/ /
( /(
( /((
C /(( C AB+C
- /((-
D /((- D AB + CD
) /( - AB + CD -10/12/2012
22
Nurdiansah PTIK 09 UNM
* / ( *
E / ( * E AB + CD – E
^ / ( * ^ AB + CD – E
F / ( * ^ F AB + CD - EF
) / ( * ^ AB + CD – EF ^
/ ( * AB + CD – EF ^ *
/
/ AB + CD – EF ^ * /
Cont‟…
10/12/2012
23
Nurdiansah PTIK 09 UNM
TO BE CONTINUE…
10/12/2012
24
Nurdiansah PTIK 09 UNM