S T A C K ( T U M P U
K A N )
LINIER LIST
Suatu
struktur data umum yang berisi suatu kumpulan terurut dari elemen;
jumlah
elemen di dalam list dapat berubah-ubah.
Linier
list A yang terdiri dari T elemen pada waktu t, dinotasikan sebagai :
A
= [ A1, A2, ..., AT]
Jika
T = 0, maka A disebut “Empty List” atau “Null List”
Suatu
elemen dapat dihilangkan/dihapus dari sembarang posisi dalam linier list,
dan
dapat pula dimasukkan elemen baru sebagai anggota list.
Contoh
:
1.
File, dengan elemennya berupa record
2.
Buku telepon
3.
Stack
4.
Queue
5.
Linear link list
STACK
Stack
adalah suatu bentuk khusus dari linier list, dengan operasi penyisipan dan
penghapusan
dibatasi hanya pada satu sisinya, yaitu puncak stack (TOP).
Elemen
teratas dari stack dinotasikan sebagai TOP(S).
Untuk
stack S, dengan S = [S1,
S2,
S3,
..., ST]
maka TOP(S) = ST
Jumlah
elemen di dalam stack kita notasikan dengan NOEL(S).
NOEL(S)
menghasilkan nilai integer.
Untuk
stack S = [S1,
S2,
S3,
..., ST]
maka NOEL (S) = T.
Operator
penyisipan (insertion) : PUSH
Operator
penghapusan (deletion) : POP
Operasi
stack : LIFO
(Last
In First Out), yaitu : yang terakhir masuk yang pertama
keluar.
Jika
ada NOEL elemen didalam stack, maka elemen ke NOEL merupakan
elemen
puncak (TOP).
Stack Secara Umum :
S
= [S1,
S2,
..., SNOEL]
bahwa
: SI
berada
di atas elemen SJ,
untuk I > J
SI
akan
dikeluarkan lebih dulu dari elemen di bawahnya.
Contoh
stack : Tumpukan baki dalam cafetaria
Empat
operasi dasar yang berlaku pada stack :
1.
CREATE(stack)
2.
ISEMPTY(stack)
3.
PUSH(elemen, stack)
4.
POP(stack)
1.
CREATE
Adalah
operator yang menunjukkan suatu stack kosong dengan nama S.
Jadi
: NOEL(CREATE(S)) = 0
TOP(CREATE(S))
adalah TIDAK TERDEFINISI.
2.
ISEMPTY
adalah
operator yang menentukan apakah stack S
kosong.
Operandnya
terdiri dari type data stack. Hasilnya merupakan type data Boolean:
ISEMPTY(S)
= True. Jika S hampa, yakni bila NOEL(S) = 0.
3.
PUSH
adalah
operator yang menambahkan elemen E pada puncak stack S.
Hasilnya
merupakan stack yang lebih besar.
PUSH(E,S).
E ditempatkan sebagai TOP(S).
4.
POP(stack)
adalah
operator yang menghapus sebuah elemen dari puncak stack S.
Hasilnya
merupakan stack yang lebih kecil.
• POP(S)
mengurangi NOEL(S)
• POP(CREATE(S))
→ kondisi
error
• POP(PUSH(E,S))
= S
DEKLARASI STACK DALAM
COBOL DAN PASCAL
TOP-PTR
→ 100
S Keterangan :
•
• STACK
S
• TOP-PTR
: subskrip dari elemen TOP(S) dari stack 1.
COBOL
01
STACK-STRUCT → kombinasi
dari array dan indikator untuk TOP
02
S OCCURS 100 TIMES PIC 9(5)
02
TOP-PTR PIC 9(3)
PASCAL
TYPE
STACKSTRUCT = RECORD
STACK
: ARRAY [1..10] of integer;
TOPPTR
: integer;
END;
VAR
S : STACKSTRUCT;
NOEL(S)
= TOP-PTR, ISEMPTY(S) = true, bila TOP-PTR = 0.
OPERASI PUSH &
POP
PUSH
IF
TOP-PTR <>
THEN
COMPUTE TOP-PTR = TOP-PTR + 1
MOVE
EON TO S(TOP-PTR)
ELSE
Overflow condition
POP
IF
TOP-PTR > 0
THEN
MOVE S(TOP-PTR) TO EOFF
COMPUTE
TOP-PTR = TOP-PTR - 1
ELSE
Underflow condition
EON
: elemen yang di PUSH ke dalam S.
EOFF
: elemen yang di POP ke luar S.
NOEL-MAX
: panjang max stack.
PUSH
Procedure
PUSH (eon: integer);
Begin
if
(s.topptr <>
then
Begin
s.topptr
:= s.topptr + 1;
s.stack
[s.topptr] := eon;
End;
else
Overflow-condition
End;
POP
Procedure
POP (var eoff : integer);
Begin
if
(s.topptr > 0)
then
Begin
eoff
:= s.stack [s.topptr];
s.topptr
:= s.topptr - 1;
End;
else
Underflow Condition
End;
APLIKASI
STACK
1.
Penjodohan Tanda Kurung/Matching Parantheses
ALGORITMA
a.
Amati barisan elemen dari kiri ke kanan
b.
• bila
bertemu ‘(‘, maka ‘(‘ di push ke dalam stack.
• bila
bertemu ‘)’, maka periksa stack hampa atau tidak.
bila
hampa → ada
‘)’ dan tidak ada ‘(‘ (error)
bila
tidak hampa → ada
sepasang ‘(‘ & ‘)’ & POP elemen keluar
2.
NOTASI
POSTFIX
ALGORITMA
Amati
barisan dari kiri ke kanan
1.
Jika ‘(‘, maka PUSH ke dalam stack.
2.
Jika ‘)’, POP elemen dalam stack sampai simbol ‘(‘. Semua di POP
merupakan
output kecuali ‘(‘ tadi.
3.
Jika simbol operand, langsung merupakan output.
4.
Jika simbol operator, maka :
Jika
elemen TOP stack dengan level >= maka POP sebagai output
teruskan
sampai ‘(‘.
elemen
TOP <, operator yang diamati di PUSH ke dalam stack.
5.
Bila ‘;’ kita POP semua elemen dalam stack hingga hampa.
APLIKASI
STACK
Notasi
Postfix
Contoh
:
Notasi
Infix : ((A+B) * C/D+E^F)/G;
Tidak ada komentar:
Posting Komentar