STACK ( TUMPUKAN )
description
Transcript of STACK ( TUMPUKAN )
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 :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
• 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
• 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 )
• 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.
• 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;
• 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
• 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
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+
• 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
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.
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.
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-*
( 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- +
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^
• 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
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.
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.
• ( 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
• SELESAIKAN :
(A + B) * (C – D) ^ E
A * B – ( C + D ) / ( E * ( F – G ) )
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+