STACK ( TUMPUKAN )

21
STACK ( TUMPUKAN ) Fajrizal

description

STACK ( TUMPUKAN ). Fajrizal. Stack ( Tumpukan ) dapat diartikan sbg : Suatu kumpulan data yang seolah-olah ada data yg diletakkan diatas data yg lain, yg bisa menyisipkan ( menambah ) data serta mengambil ( menghapus data ). Cara penggambaran stack : Operasi yg dpt dilakukan dalam stack : - PowerPoint PPT Presentation

Transcript of STACK ( TUMPUKAN )

Page 1: STACK ( TUMPUKAN )

STACK ( TUMPUKAN )

Fajrizal

Page 2: STACK ( TUMPUKAN )

• Stack ( Tumpukan ) dapat diartikan sbg :Suatu kumpulan data yang seolah-olah ada data yg diletakkan diatas data yg lain, yg bisa menyisipkan ( menambah ) data serta mengambil ( menghapus data ).

• Cara penggambaran stack :

• Operasi yg dpt dilakukan dalam stack :1. Menyisipkan / menambahkan data pd ujung atas stack push2. Menghapus / mengeluarkan data dr ujung atas stack pop

• Prinsip kerja stack adalah LIFO ( Last In First Out )

A

B

C

D

Bottom

Top

Page 3: STACK ( TUMPUKAN )

• Example :

A

B

A

C

Push ( S, A )

Push ( S, C )

Push ( S, B )

Pop ( S )

B

A

A

Pop ( S )

B

A

C Push ( S, C )

Push ( S, B )

D Push ( S, D )

Kondisi awal Stack1

2

3

4

5

6

Page 4: STACK ( TUMPUKAN )

• Latihan :

Gambarkan keadaan stack utk operasi berikut ( diasumsikan keadaan awal stack kosong ), stack dapat menampung max 4 elemen berupa data NIM.a. Tambahkan 2 no NIM ke dalam stack yaitu ( 0631521001 & 0631521002 )b. keluarkan 1 elemen dari stackc. Tambahkan 3 elemen berikutnya ke dalam stack dg data (0631521003 & 0631521004 & 0631521005 )

Page 5: STACK ( TUMPUKAN )

• Penyajian awal Stack :Dalam Pascal dikenal type data terstruktur yg disebut ARRAY (LARIK). Dapat digunakan u menyajikan sebuah tumpukan. Tapi penyajian dg mengg. ARRAY adalah kurang tepat karena banyaknya elemen dalam array adalah statis. Sedangkan dalam tumpukan, banyaknya elemen dapat bervariasi ( dinamis ).Meskipun demikian, ARRAY dapat digunakan u menyajikan sebuah tumpukan dg anggapan bahwa banyaknya elemen max dari tumpukan tsb tidak akan melebihi batas max banyaknya elemen dalam array.

• Pada saat ukuran tumpukan = ukuran array, jika ditambahkan data baru akan menyebabkan “OVERFLOW”.

• Dengan demikian perlu adanya data tambahan u mencatat posisi ujung atas tumpukan.

Page 6: STACK ( TUMPUKAN )

• Dengan kebutuhan ini, penyajian tumpukan dapat dilakukan dengan menggunakan type data terstruktur yang lain yaitu RECORD ( Rekaman ) yg terdiri dari 2 field :- Field 1 Digunakan u menyimpan elemen tumpukan yg bertype array- Field 2 Digunakan u mencatat posisi atas ujung tumpukan.

Deklarasi STACK secara umum :const MaxElemen =255;type Tumpukan = record

Isi : array[1..MaxElemen] of string;atas : 0..MaxElemenend;

var T : Tumpukan;

Page 7: STACK ( TUMPUKAN )

• Operasi PUSH :

procedure PUSH ( var T : Tumpukan; X : string );begin

T.Atas :=T.Atas + 1;T.Isi[T.Atas] := X

end;

procedure PUSH ( var T : Tumpukan; X : string );begin

if T.Atas = MaxElemen thenwriteln ( ‘ TUMPUKAN SUDAH PENUH ‘ )

elsebegin

T.Atas :=T.Atas + 1;T.Isi[T.Atas] := X

endend;

1

2

Page 8: STACK ( TUMPUKAN )

• Operasi POP :

procedure POP ( var T : Tumpukan);begin

T.Atas :=T.Atas - 1end;

procedure POP ( var T : Tumpukan);begin

if T.Atas = 0 thenwriteln ( ‘ TUMPUKAN SUDAH KOSONG ‘ )

elsebegin

T.Atas :=T.Atas - 1end

end;

1

2

Page 9: STACK ( TUMPUKAN )

PENULISAN UNGKAPAN NUMERIS DALAM STACK

• Salah satu aplikasi STACK adalah untuk menulis ungkapan dengan menggunakan notasi tertentu.

• Cara penulisan ungkapan dapat dilakukan dengan menggunakan :1. Notasi INFIX Operator diletakkan diantara 2 operand ex : A+B dimana A,B sbg operand dan + sbg operator2. Notasi PREFIX ( POLISH ) Operator diletakkan sebelum 2 operand disajikan ex : +AB3. Notasi POSTFIX ( SUFFIX ) operator diletakkan setelah 2 operand disajikan ex : AB+

Page 10: STACK ( TUMPUKAN )

• Dalam penulisan ungkapan, khususnya ungkapan numeris seringkali digunakan tanda kurung u mengelompokkan bagian mana yg harus dikerjakan lebih dahulu.

• Dalam ungkapan2 yg rumit, pemakaian tanda kurung ini tidak bisa dihindari.

• “ Semakin rumit ungkapan maka semakin banyak dibutuhkan tanda kurung “.

• Hal ini membawa suatu konsekwensi bahwa penulisan tanda kurung itupun harus benar2 terhindar dari kesalahan.

• Contoh : ( dalam notasi infix ) DG METODE SUBSTITUSI1. A + B x C Notasi Prefix Notasi Postfix

xBC 1 BCx 1+A1 2 A1+ 2

• Latihan :2. (A + B) x (C –(D ^ E))3. (A x B) – ( C + D ) / ( E x ( F – G ) )

1

2

Page 11: STACK ( TUMPUKAN )

Algorithma Konversi dari Infix ke Postfix• Langkah 0 ( Awal )

- Baca ungkapan dalam notasi infix, misalnya = S- Tentukan panjang ungkapan tersebut, misalnya N karakter- Siapkan sebuah tumpukan kosong & siapkan derajad masing2 operator, misalnya :^ pangkat = bernilai 3x , / = bernilai 2+ , - = bernilai 1) , ( = bernilai 0

• Langkah 1Dimulai dari I=1 sampai N, kerjakan langkah2 berikuta. R = S [ I ]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, tapi tidak usah ditulis.

Page 12: STACK ( TUMPUKAN )

operator : jika tumpukan kosong, atau derajad R lebih tinggi dibanding derajad ujung tumpukan, push operator ke dalam tumpukan. Jika tidak, pop ujung tumpukan da tulis, kemudian ulangi pembandingan R ujung tumpukan. Kemudian R di push.

• Langkah 2Jika akhir notasi infix telah tercapai, dan tumpukan masih belum kosong, pop semua isi tumpukan dan tulis hasilnya.

Page 13: STACK ( TUMPUKAN )

1. ( A + B ) x ( C – D ) N = 11 karakter

Proses ke

Karakter dibaca ( R )

Isi Stack Karakter tercatat

Notasi Postfix terbentuk

123456789

1011

(A+B)*(C-D)

(

+(

Kosong*(*

-(*

*Kosong

A

B+

C

D-*

A

ABAB+

AB+C

AB+CDAB+CD-AB+CD-*

Page 14: STACK ( TUMPUKAN )

( K ^ ( L + M )) + ( N – O ) N = 15 karakter

Proses ke

Karakter dibaca

Isi Stack Karakter tercatat

Notasi Postfix terbentuk

123456789

10111213 14151617

(K^(L+ M)

+(N-O)

(

^(( ^ (

+ ( ^ (

( ^ (( (Kosong+( +

-( +

( ++kosong

K

L

M+^

N

O-+

K

KL

KLMKLM +KLM +^

KLM +^ N

KLM +^ NOKLM +^ NO-KLM +^ NO- +

Page 15: STACK ( TUMPUKAN )

2. (A + B) * (C – D) ^ E N = 13 karakter

Proses ke

Karakter dibaca ( R )

Isi Stack Karakter tercatat

Notasi Postfix terbentuk

123456789

1011

1213

(A+B)*(C-D)

^E

(

+(

Kosong*(*

-(*

*Kosong^

Kosong

A

B+

C

D-*

E^

A

ABAB+

AB+C

AB+CDAB+CD-AB+CD-*

AB+CD-*EAB+CD-*E^

Page 16: STACK ( TUMPUKAN )

• Cara Substitusi : Infix Postfix( A x B ) x ( C – D ) 1. A*B 1. AB*

2. C-D 2. CD-3. 1*2 3. 12*

4. AB*CD-*

LATIHAN :

1. A + B * C – D ^ E2. (A * B) – ( C + D ) / ( E * ( F – G ))

1 2

3

Page 17: STACK ( TUMPUKAN )

Algorithma Konversi dari Infix ke Prefix• Langkah 0 ( Awal )

- Baca ungkapan dalam notasi infix, misalnya = S- Tentukan panjang ungkapan tersebut, misalnya N karakter- Siapkan sebuah tumpukan kosong & siapkan derajad masing2 operator, misalnya :$ pangkat = bernilai 3x , / = bernilai 2+ , - = bernilai 1) , ( = bernilai 0

• Langkah 1Dimulai dari I=N sampai 1, kerjakan langkah2 berikuta. R = S [ I ]b. Test nilai R, jika R adalah : operand : langsung ditulis & simpan ke var T kurung tutup : push ke dalam tumpukan kurung buka : pop dan tulis semua isi tumpukan sampai ujung

tumpukan = ‘)‘. Pop juga tanda ‘)‘ ini, tapi tidak usah ditulis.

Page 18: STACK ( TUMPUKAN )

operator : jika tumpukan kosong, atau derajad R lebih tinggi atau sama dibanding derajad ujung tumpukan, push operator ke dalam tumpukan. Jika tidak, pop ujung tumpukan dan tulis disimpan ke var T, kemudian ulangi pembandingan R ujung tumpukan. Kemudian R di push.

• Langkah 2Jika akhir notasi infix telah tercapai, dan tumpukan masih belum kosong, pop semua isi tumpukan dan tulis hasilnya, kemudian simpan ke var T.

• Langkah 3Baca data dalam variabel T, dimulai dari N sampai 1 dan tulis ke dalam notasi prefix.

Page 19: STACK ( TUMPUKAN )

• ( A + B ) x ( C – D ) N = 11 karakter

Proses ke

Karakter dibaca ( R )

Isi Stack Karakter tercatat

Isi Variabel T( Notasi Postfix )

Notasi Prefix terbentuk

123456789

10111213

)D-C(*)B+A(

)

-)

Kosong*)*

+)*

*Kosong

D

C-

B

A+*

D

DCDC-

DC-B

DC-BADC-BA+DC-BA+* *+AB-CD

Page 20: STACK ( TUMPUKAN )

• SELESAIKAN :

(A + B) * (C – D) ^ E

A * B – ( C + D ) / ( E * ( F – G ) )

Page 21: STACK ( TUMPUKAN )

Proses ke Karakter dibaca ( R )

Isi Stack Karakter tercatat Notasi Postfix terbentuk

123456789

101112131415

161718192021

222324

((P-Q)+R)X(S^T)

/((U/V)

+W)

(( (

-( (

KOSONG+

KOSONGX( X

^ ( X

*KOSONG/( ( /

/ ( ( /

( ( /KOSONG+

KOSONG

P

PQ-

R+

S

T^*

U

V//

W+

P

PQPQ-

PQ-RPQ-R+

PQ-R+S

PQ-R+STPQ-R+ST^PQ-R+ST^*

PQ-R+ST^*U

PQ-R+ST^*UVPQ-R+ST^*UV/PQ-R+ST^*UV//

PQ-R+ST^*UV//WPQ-R+ST^*UV//W+