Pert.6 stack

24
Stack 10/12/2012 1 Nurdiansah PTIK 09 UNM

Transcript of Pert.6 stack

Page 1: Pert.6 stack

Stack

10/12/2012

1

Nurdiansah PTIK 09 UNM

Page 2: Pert.6 stack

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

Page 3: Pert.6 stack

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

Page 4: Pert.6 stack

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

Page 5: Pert.6 stack

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

Page 6: Pert.6 stack

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

Page 7: Pert.6 stack

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

Page 8: Pert.6 stack

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

Page 9: Pert.6 stack

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

Page 10: Pert.6 stack

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

Page 11: Pert.6 stack

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

Page 12: Pert.6 stack

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

Page 13: Pert.6 stack

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

Page 14: Pert.6 stack

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

Page 15: Pert.6 stack

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

Page 16: Pert.6 stack

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

Page 17: Pert.6 stack

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

Page 18: Pert.6 stack

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

Page 19: Pert.6 stack

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

Page 20: Pert.6 stack

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

Page 21: Pert.6 stack

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

Page 22: Pert.6 stack

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

Page 23: Pert.6 stack

* / ( *

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

Page 24: Pert.6 stack

TO BE CONTINUE…

10/12/2012

24

Nurdiansah PTIK 09 UNM