Anda di halaman 1dari 35

Matematika FMIPA Catatan Kuliah

Universitas Andalas Struktur Data

BAB II
STACK (TUMPUKAN)
 STACK (Tumpukan) adalah bentuk khusus dari list linier.
 Pada stack, penghapusan serta penyisipan elemennya
hanya dapat dilakukan pada satu posisi akhir dari list.
 Posisi ini disebut puncak atau TOP dari stack.
 Elemen stack S pada posisi ini dinyatakan dengan
TOP(S).
 Karena aturan penyisipan dan penghapusan semacam
itu, maka TOP adalah satu-satunya alamat tempat terjadi
operasi.
 Elemen yang ditambahkan paling akhir akan menjadi
elemen yang pertama akan dihapus.
 Dikatakan bahwa elemen Stack akan tersusun secara
LIFO (Last In First Out).
22 February 2017 < Narwen, M.Si > 1
Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data

Ilustrasi dari stack S.


• Mula-mula stack S kosong.
In Out • Elemen stack S dimasukan pada
TOP
• Elemen pertama dimasukan A
TOP
• Elemen kedua dimasukan B
4 D 1 • Elemen ketiga dimasukan C
3 C 2 • Elemen keempat dimasukan D
2 B 3 • Elemen stack S dikeluarkan pada
4 TOP
1 A
• Elemen pertama dikeluarkan D
0
Stack S • Elemen kedua dikeluarkan C
• Elemen ketiga dikeluarkan B
• Elemen keempat dikeluarkan A
• Stack S kembali kosong.

22 February 2017 < Narwen, M.Si > 2


Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data

Operasi Pada Stack.


1. PUSH
Digunakan untuk: Simpan, atau Masuk, atau Insert, atau Tulis
Nilai TOP(S) akan bertambah 1.
PUSH(S,X): menambah elemen X pada stack S di posisi TOP(S).
kesalahan terjadi bila dilakukan terhadap stack yg sdh penuh.
Stack S penuh apabila nilai TOP(S) = makstack
2. POP(S)
Digunakan untuk: Ambil, atau Keluar, atau Delete, atau Baca, atau
Hapus.
POP(S): mengeluarkan elemen pada TOP(S) dari dalam Stack S.
Nilai TOP(S) akan berkurang 1.
kesalahan terjadi bila dilakukan operasi ini terhadap Stack yang
kosong.
Stack S kosong apabila nilai TOP(S) = 0.

Catatan : Nilai maksimum stack S (makstack) hrs diberikan terlebih dahulu

22 February 2017 < Narwen, M.Si > 3


Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data

Single Stack
Single stack adalah stack yang terdiri dari satu collection.
1. Single stack dengan array satu dimensi.
Ada tiga proses pada stack,
a. Proses AWAL (Inisialisasi)
Proses menyiapkan indeks penunjuk stack pertama kali.
TOP = 0;
Ilustrasi:
0 1 2 3 4 5 6 7 8 9 10 n=10
S[ ]

TOP 0 0
TOP X
Pada saat ini,
 Array(stack) belum ada isinya
 Variabel X juga belum ada isinya
 Variabel TOP bernilai 0 dan operasi yang bisa dilakukan PUSH
22 February 2017 < Narwen, M.Si > 4
Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data

b. Proses menyimpan (PUSH) data ke dalam stack.

Algoritma untuk proses PUSH dapat ditulis dalam bentuk fungsi.


 Periksa apakah stack S dapat diisi atau penuh.
 Jika dapat diisi, maka
 nilai TOP ditambah satu.
 Elemen yang ditunjuk oleh TOP yaitu S[TOP] diisi dengan
nilai X.
 Jika penuh maka tampilkan pesan kesalahan “Stack Penuh”.

Atau ditulis,

22 February 2017 < Narwen, M.Si > 5


Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data

c. Proses mengambil sebuah isi stack (POP).

Algoritma untuk proses POP dapat ditulis dalam bentuk fungsi.


 Periksa apakah stack S ada isinya atau kosong.
 Jika ada isinya,
 maka X diisi oleh nilai S[TOP]
 Nilai TOP dikurangi satu.
 Jika kosong maka tampilkan pesan kesalahan “Stack Kosong”.

Atau ditulis,

22 February 2017 < Narwen, M.Si > 6


Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data

Deklarasi Stack dengan PASCAL :

Const maxstack = ……………;


Type Stack = Record
item : array[1..maxstack] of <tipeitem>
top : 0..maxstack;
end;
Var S : Stack;

Function Empty(s:Stack) : boolean;


Begin
if S.top = 0
then empty := true
else empty := false
End;

22 February 2017 < Narwen, M.Si > 7


Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data

Procedure Push(var s:Stack; x : <tipeitem>);


Begin
if S.top = maxstack
then writeln(‘error(stack overflow)’)
else begin
s.top := s.top + 1;
s.item[s.top] := x;
end;
End;

Function Pop(var s:Stack): <tipeitem>;


Begin
if empty(S)
then writeln(‘error(stack underflow)’)
else begin
pop := s.item[s.top];
s.top := s.top - 1
end;
End;

22 February 2017 < Narwen, M.Si > 8


Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data

Contoh
Susun program untuk menyiapkan array satu dimensi yang akan
digunakan sebagai stack S sebanyak 10 elemen. Kemudian lakukan
proses simpan data ke stack (PUSH) dan proses mengeluarkan isi stack
(POP) dengan proses sebagai berikut:
1. Input data dari keyboard. Bila data diinput 999, maka proses selesai.
2. Bila data yang diinput bernilai >= 60, periksa kondisi stack. Bila
stack masih bisa diisi maka PUSH data tersebut ke dalam stack dan
kembali ke langkah 1. Tapi bila stack sudah penuh, maka data tidak
jadi disimpan dan cetak pesan “Stack Penuh” dan proses selesai.
3. Bila data yang diinput bernilai < 60, periksa kondisi stack. Bila stack
ada isinya maka POP data tersebut dari stack, kemudian cetak ke
layar dan kembali ke langkah 1. Tapi bila stack sudah kosong, maka
cetak pesan “Stack Kosong” dan proses selesai.

22 February 2017 < Narwen, M.Si > 9


Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data

Algoritma mencetak isi dari stack S. Misalkan jika di tekan P maka


lakukan operasi push, jika O lakukan operasi pop dan jika X keluar.
1) Tampilkan menu operasi ( P : Push, O : Pop , X : Keluar)
2) Stack S mula-mula kosong.
3) Tampikan isi stack S
4) Masukan operasi yang akan dilakukan terhadap stack S (opr)
5) Jika opr = „P‟ maka
 Masukan sebuah elemen (elmn)
 Push elmn tersebut ke dalam stack S dan langkah 6
6) Jika opr = „O‟ maka
 Jika stack S kosong maka tampilkan pesan salah
 Jika tak kosong maka lakukan pop terhadap top(S) dan
kosongkan item pada top(S)
7) Cetak isi dari stack S dan langkah 4 .
8) Jika opr = „X‟ maka selesai

22 February 2017 < Narwen, M.Si > 10


Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data
Program Animasi_isi_dari_Stack; { Nama Program : SDDP01.PAS }
uses CRT;
const maxstack = 6;
Type stack = record
item : array [1..maxstack] of char;
top : 0..maxstack ;
end;
Var s : stack ;
elmn,opr,j : char ;
valid : boolean ;
batas,i : integer ;
Function Empty(s : stack ) : boolean;
Begin
if s.top = 0 then Empty := true else Empty := false;
End;
Procedure Push(var s : stack; x : char);
Begin
if s.top = maxstack then write ('Stack overflow. Operasi harus Pop : ')
else begin
s.top := s.top + 1;
s.item[s.top] := x;
end;
End;
Function POP (var s: stack) : char;
Begin
if Empty(s) then write('Stack underflow. Operasi harus Push')
else begin
pop := s.item[s.top];
s.item[s.top] := '*';
s.top := s.top - 1;
end;
end;

22 February 2017 < Narwen, M.Si > 11


Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data
Procedure cetak(s : stack);
begin
write(' =[ ');
for i := 1 to maxstack do write(s.item[i],' '); writeln(']=');
end;
Begin {----------- Program utama -----------}
clrscr;
writeln (' ------------------Animasi dari Stack------------------');
writeln (' | |');
writeln (' | Tekan P dan satu karakter lainnya untuk PUSH |');
writeln (' | Tekan O untuk melakukan POP |');
writeln (' | Tekan X keluar |');
writeln (' ------------------------------------------------------');
for i := 1 to maxstack do s.item[i] := '*';
write('Keadaan stack mula-mula :'); cetak(s); s.top := 0;
repeat
write('Operasi yang anda inginkan : ');readln(opr);
if upcase(opr) = 'P' then
begin
if s.top < maxstack then
begin
write('Elemen yang akan di Push : ');readln(elmn);
write('Elemen ''',upcase(elmn),''' di Pusk ke Stack :');
end;
push(s,upcase(elmn)); cetak(s);
end else
if upcase(opr) = 'O' then
begin
if s.top > 0 then write('Elemen ''',s.item[s.top],''' di pop dari Stack :');
j := pop(s); cetak(s);
end
until upcase(opr) = 'X';
end.
22 February 2017 < Narwen, M.Si > 12
Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data

Aplikasi dari Stack.


Stack sangat luas pemakaiannya. Beberapa aplikasi dari stack
adalah sebagai berikut.
1. Penjodohan Tanda Kurung (Matching Parentheses).
A. Satu jenis tanda kurung
 Ekspresi matematika hanya melibatkan satu jenis tanda kurung,
yaitu tanda kurung “(“ dan diakhiri “)”.
 Karena itu harus diperiksa aturan,
1. Banyak tanda kurung pembuka = banyak tanda kurung penutup, dan
2. Setiap tanda kurung pembuka mendahului kurung penutupnya.
Contoh: ((A+B) atau A+B(  menyalahi aturan 1
)A+B(-C atau (A+B))-(C+D  menyalahi aturan 2
 Gunakan stack dengan aturan, bila ditemukan kurung pembuka,
lakukan push, sedgkan kurung penutup, lakukan pop pada stack, shg
1. Jumlah tanda kurung dalam stack diakhir ekspresi adalah 0
2. Jumlah tanda kurung tidak boleh negatif di dalam eksprei.
22 February 2017 < Narwen, M.Si > 13
Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data

Algoritma memeriksa ekspresi matematika dengan satu jenis tanda


kurung.
1) Masukan sebuah ekspresi matematika (E)
2) Hitung panjang string E tersebut (n)
3) Set nilai valid  true dan stack S kosong.
4) Untuk i  1, 2, …, n maka lakukan
a) Jika Ei = „(„ maka push string tersebut ke dalam Stack S
b) Jika Ei = „)„ maka
Jika stack S tidak kosong maka pop Stack S.
Jika kosong maka valid = false dan lanjut langkah 5
c) Jika i = n dan stack S tidak kosong maka valid = false
5) Jika valid maka cetak “Ekspresi adalah sah” dan sebaliknya cetak
“Ekspresi tidak sah”
Contoh: Gunakan algoritma di atas untuk menguji keabsahan ekspresi
matematika berikut. ((A+B), A+B( , )A+B(-C atau (A+B))-(C+D
(A+B)+(C*(A-B)+C)
22 February 2017 < Narwen, M.Si > 14
Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data

B. Tiga jenis tanda kurung


 Ekspresi matematika melibatkan tiga jenis tanda kurung, yaitu tanda
kurung “(“, “{“, “[“ dan diakhiri “)”, “}“, “]“.
 Karena itu harus diperiksa aturan,
1. Jenis tanda kurung pembuka = jenis tanda kurung penutup, dan
2. Setiap tanda kurung pembuka didahului kurung penutupnya.
Contoh: (A+B] atau [(A+B])  menyalahi aturan 1
)A+B(-C atau (A+B)}-{C+D  menyalahi aturan 2
 Gunakan stack dengan aturan, bila ditemukan kurung pembuka,
lakukan push, sedgkan kurung penutup dan sesuai dengan kurung
pembuka maka lakukan pop pada stack, shg
1. Jumlah tanda kurung dalam stack diakhir ekspresi adalah 0
2. Jumlah tanda kurung tidak boleh negatif di dalam eksprei.

22 February 2017 < Narwen, M.Si > 15


Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data

Algoritma memeriksa ekspresi matematika dengan tiga jenis tanda


kurung.
1) Masukan sebuah ekspresi matematika (E)
2) Hitung panjang string E tersebut (n)
3) Set nilai valid  true dan stack S kosong.
4) Selama i <= n dan valid maka lakukan,
a) Jika Ei anggota { „(„,‟{„,‟[„ } maka push string tersebut ke Stack S
b) Jika Ei anggota { „)‟,‟}‟,‟]‟ } maka
Jika stack S kosong maka valid = false
Jika stack S tidak kosong maka
 Jika top stack S tidak sama dengan Ei maka valid = false
 Jika top stack S sama dengan Ei maka pop elemen tersebut.
c) Jika i = n dan stack S tidak kosong maka valid = false
5) Jika valid maka cetak “Ekspresi adalah sah” , sebaliknya cetak
“Ekspresi tidak sah”

22 February 2017 < Narwen, M.Si > 16


Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data

Contoh. Periksa apakah ekspresi berikut valid atau tidak.


a) {[a+b]-[(c-d)]
b) {x+(y-[a+b])*c-[(d+e)]}/(h-(j-(k-[l-n])))

Latihan. Buat program pascal untuk menyelesaikan kedua


masalah pencocokan tanda kurung (matching
parentheses) tersebut.

22 February 2017 < Narwen, M.Si > 17


Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data
Program Memeriksa_Penggunaan_Tanda_Kurung; { Nama Program : SDDP02.PAS }
uses CRT;
const maxstack = 80;
type stack = record
item : array [1..maxstack] of char;
top : 0..maxstack;
end;
var s : stack ;
E : string[80] ;
valid : boolean ;
n,j : integer ;
i : char ;
Function Empty( s : stack ) : boolean;
begin
if s.top = 0 then Empty := true else Empty := false;
end;
Procedure Push(var s : stack; x : char);
begin
if s.top = maxstack then writeln (' Stack overflow ')
else begin
s.top := s.top + 1;
s.item[s.top] := x;
end;
end;
Function POP (var s: stack) : char;
begin
if Empty(s) then writeln(' Stack underflow ')
else begin
pop := s.item[s.top];
s.item[s.top] :=' ';
s.top := s.top - 1;
end;
end;
22 February 2017 < Narwen, M.Si > 18
Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data
begin {----------- Program utama -----------}
clrscr;
write ('Masukkan ekspresi yang akan diuji/max 80 : ');
readln(E);
n := length(E);
valid:=true; s.top := 0; j := 1;
if n = 0 then
begin
valid := false;
writeln('Anda belum memasukkan ekspresi yang akan diuji');
end;
while ( j <= n ) and (valid) do
begin
if E[j] in ['(','[','{'] then push(s,E[j]);
if E[j] in [')',']','}']
then if Empty(s) then valid:= false
else begin
i:=pop(s);
if (i='(') and (E[j]=')') or
(i='[') and (E[j]=']') or
(i='{') and (E[j]='}')
then valid:= true
else valid:=false;
end;
writeln(E[j]:5,' : ',s.item);
j:=j+1;
end;
If not empty(s) then valid := false;
If valid then writeln ('Ekspresi ''',E,''' valid / sah')
else writeln ('Ekspresi ''',E,''' invalid/tidak sah');
readln;
end.

22 February 2017 < Narwen, M.Si > 19


Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data

2. Menghitung Nilai Ekspresi Matematika.


 Diberikan sebuah ekspresi matematika.
 Asumsikan ekspresi matematika itu sah.
 Akan dihitung nilai ekspresi tersebut bila nilai variabelnya diketahui .
 Dibutuhkan tiga stack, yaitu stack S1, stack S2 dan stack S3.
 Stack S1 berisi tanda kurung
 Stack S2 berisi operand (variabel atau konstanta)
 Stack S3 berisi operator ($, +, -, /, *)

Algoritma menghitung nilai ekspresi matematika.


1) Masukan sebuah ekspresi matematika (E)
2) Hitung panjang string E tersebut (n)
3) Set nilai valid  true dan stack S1, S2 dan S3 kosong.
4) Untuk i  1, 2, …, n maka lakukan,
a) Jika Ei = kurung pembuka maka push string tersebut ke stack S1
b) Jika Ei = operand, maka push string tersebut ke stack S2
22 February 2017 < Narwen, M.Si > 20
Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data

c) Jika Ei = operator, maka push string tersebut ke stack S3.


d) Bila ditemukan kurung penutup, maka
 jika stack S1 kosong maka ekspresi valid  false
 jika stack S1 tak kosong maka ,
 jika Ei ≠ top(S1) maka valid  false
 jika Ei = top(S1) maka
o Pop elemen top(S1)
o Pop dua elemen dari top(S2)
o Pop elemen top(S3)
o Operasikan dua elemen stack S2 dengan elemen S3
o Push hasilnya ke dalam stack S2
5) Jika valid maka cetak nilai Pop(S2) , sebaliknya cetak “Ekspresi tidak
sah”
Contoh. Hitung nilai ekspresi (((y-1)/x)*(x+y)), bila nilai x = 2 dan y = 5.
Latihan. Buat program pascal untuk menyelesaikan masalah menghitung
nilai ekspresi tersebut.
22 February 2017 < Narwen, M.Si > 21
Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data
Program Menghitung_Nilai_expresi_matematika_dengan_Tanda_Kurung; { Nama Program : SDDP03.PAS }
uses CRT;
const maxstack = 80;
type stack1 = record
item : array [1..maxstack] of char;
top : 0..maxstack;
end;
stack2 = record
item : array [1..maxstack] of real;
top : 0..maxstack;
end;
var s1,s3 : stack1 ; s2 : stack2 ;
E : string[80] ; valid : boolean ;
n,j ,er,jj : integer ;
tops1,tops3 : char;
tops21,tops22,h,nEj : real;
Function Empty1( s : stack1 ) : boolean;
begin
if s.top = 0 then Empty1 := true else Empty1 := false;
end;
Function Empty2( s : stack2 ) : boolean;
begin
if s.top = 0 then Empty2 := true else Empty2 := false;
end;
Procedure Push1(var s : stack1; x : char);
begin
if s.top = maxstack then writeln (' Stack overflow ')
else begin
s.top := s.top + 1; s.item[s.top] := x;
end;
end;
Procedure Push2(var s : stack2; x : real);
begin
if s.top = maxstack then writeln (' Stack overflow ')
else begin
s.top := s.top + 1; s.item[s.top] := x;
end;
end;
22 February 2017 < Narwen, M.Si > 22
Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data

Function POP1 (var s: stack1) : char;


begin
if Empty1(s)
then writeln(' Stack underflow ')
else begin
pop1 := s.item[s.top];
s.item[s.top] :=' ';
s.top := s.top - 1;
end;
end;

Function POP2 (var s: stack2) : real;


begin
if Empty2(s)
then writeln(' Stack underflow ')
else begin
pop2 := s.item[s.top];
s.item[s.top] := 0;
s.top := s.top - 1;
end;
end;
function operasi(op1,op2:real; opr : char) : real;
begin
case opr of
'$' : operasi := exp(op2*ln(op1));
'*' : operasi := op1 * op2;
'/' : operasi := op1 / op2;
'+' : operasi := op1 + op2;
'-' : operasi := op1 - op2;
end;
end;

22 February 2017 < Narwen, M.Si > 23


Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data
begin {----------- Program utama -----------}
clrscr;
write ('Masukkan ekspresi matematika : '); readln(E);
n := length(E); valid:=true; s1.top:=0; s2.top:=0; s3.top:=0; j := 1;
if n = 0 then
begin
valid := false; writeln('Anda belum memasukkan ekspresi yang akan diuji');
end;
while ( j <= n ) and (valid) do
begin
if E[j] in ['(','[','{'] then push1(s1,E[j]);
if E[j] in ['0'..'9'] then
begin
val(E[j],nEj,er); push2(s2,nEj);
end;
if E[j] in ['$','*','/','+','-'] then push1(s3,E[j]);
if E[j] in [')',']','}'] then if Empty1(s1) then valid:= false
else begin
if (pop1(s1)='(') and (E[j]=')') or
(pop1(s1)='[') and (E[j]=']') or
(pop1(s1)='{') and (E[j]='}')
then
begin
tops22:= pop2(s2); tops21:= pop2(s2); tops3 := pop1(s3);
h := operasi(tops21,tops22,tops3); push2(s2,h);
end
else valid:=false;
end;
writeln('Karakter ke-',j,' = ',E[j]) ;
writeln(‘ Stack1 : ‘,s1.item;
write(‘ Stack2 : ');for jj := 1 to s2.top do write(s2.item[jj]:6:2);writeln;
writeln('Stack3 : ‘,s3.item;
j:=j+1;
end;

22 February 2017 < Narwen, M.Si > 24


Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data
If not empty1(s1) then valid := false;
while not(empty1(s3)) do
Begin
tops22:= pop2(s2);
tops21:= pop2(s2);
tops3 := pop1(s3);
h := operasi(tops21,tops22,tops3);
push2(s2,h);
end ;
If valid then writeln ('Ekspresi ''',E,''' = ',pop2(s2):6:2)
else writeln ('Ekspresi ''',E,''' invalid/tidak sah');
readln;
end.

22 February 2017 < Narwen, M.Si > 25


Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data

3. Notasi INFIX, POSTFIX dan PREFIX.


 Ekspresi matematika umumnya berisi dua operator biner
 Operator biner adalah operator yang diikuti oleh dua operand
 Operator biner : perpangkatan ($), perkalian (*), pembagian (/),
penjumlahan (+) dan pengurangan (-)
 Operator biner dan hirarkinya dari tertinggi ke terendah adalah
1) Perpangkatan ($)
2) Perkalian atau pembagiian ( * atau / )
3) Penjumlahan atau pengurangan ( + atau - )
 Bila hirarki operatornya berbeda, operasikan terlebih dahulu operator
yang hirarkinya lebih tinggi.
 Bila hirarki operatornya sama, operasikan terlebih dahulu operator yang
berada di sebelah kirinya, kecuali operator $ , dimulai dari kanan.
Ilustarasi : 2+3-5, 2-3+5, 2+3*5, 2*3$2$2, 2/4*5
 Ekspresi matematika yang memuat tanda kurung, hirarki operator tidak
berpengaruh. Operasikan terlebih dahulu yang ada dalam tanda kurung.
22 February 2017 < Narwen, M.Si > 26
Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data

 Berdasarkan posisi dari operator terhadap operand, diberikan awalan


pre, post dan in dalam menyatakan ekspresi matematika.
 Akibatnya diperoleh 3 bentuk notasi ekpresi matematika,
1. Infix: bentuk penulisan dimana operator terletak antara dua operand
Misalkan : A + B
2. Postfix : bentuk penulisan dimana operator didahului dua operand
Misalkan : A B +
3. Prefix : bentuk penulisan dimana operator mendahului dua operand
Misalkan : + A B
 Dalam notas infix, penggunaan tanda kurung akan menentukan makna
dari bentuk ekspresi. Tanpa tanda kurung, maka ekspresi matematika
harus mengikuti hirarki operatornya.
 Operator *, +, - dan / dalam infix tanpa tanda kurung dibaca dari kiri ke
kanan, sedangkan operator $ dibaca dari kanan ke kiri.
 Notasi ekspresi matematika dapat dikoversikan dari satu notasi ekspresi
ke bentuk notasi ekspresi lainnya.

22 February 2017 < Narwen, M.Si > 27


Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data

Contoh : Rubah ke notasi prefix dan postfix dari bentuk infix


berikut.
1) a – b + c
2) ( a + b ) * ( c – d )
3) a – b * c + d
4) a $ b * c – d + e / f / ( g + h )
5) ( ( a + b ) * c – d + e ) $ ( f + g ) $ h
6) a – b / ( c * d $ e )

22 February 2017 < Narwen, M.Si > 28


Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data

3.a. Menghitung nilai notasi Postfix.


 Setiap operator dari bentuk notasi postfix mengacu pada dua operand
yang mendahuluinya.
 Akibatnya, diperoleh satu operand yang merupakan hasil operasi
matematika dari operator dan dua operand tersebut.
 Bila diaplikasikan ke dalam Stack, maka dibutuhkan sebuah stack
opndstk, kemudian dalam notasi postfix,
 Jika ditemukan operand, lakukan PUSH pada stack opndstk
 Jika ditemukan operator, lakukan POP terhadap dua elemen TOP dari
stack opndstk
 kemudian lakukan operasi matematika terhadap kedua elemen
tersebut sesuai dengan operator yang ditemukan
 Selanjutnya lakukan PUSH terhadap hasil operasi itu ke dalam stack
opndstk.
 Nilai dari ekspresi postfix adalah elemen yang ada pada top (opndstk)

22 February 2017 < Narwen, M.Si > 29


Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data

Algoritma menghitung nilai notasi Postfix.


1) Set opndstk kosong
2) Masukan ekspresi matematika dalam notasi postfix(S)
3) Hitung panjang karakter dari postfix yang dimasukan (n)
4) Untuk i  1, 2, …, n lakukan
 Symb  Si
 Jika symb adalah operand maka PUSH (opndstk,symb)
 Jika symb adalah operator maka ,
 opnd2 := pop(opndstk)
 opnd1 := pop(opnstk)
 value := oper(symb, opd1,opnd2)
 push(opndstk,value);
5) Cetak nilai top (opndstk)

Contoh. Hitung nilai dari ekpspresi postfix berikut:


6 2 3 + - 3 8 2 / + * 2 $ 3 +
22 February 2017 < Narwen, M.Si > 30
Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data
Program Menghitung_Nilai_Notasi_Postfix; { Nama Program : SDDP04.PAS }
uses CRT;
const maxstack = 80;
type stack = record
item : array [1..maxstack] of real;
top : 0..maxstack;
end;
var
opndstk : stack ;
E : string[80] ;
n,j ,er,jj : integer ;
tops21,tops22,h,nEj : real ;
Function Empty( s : stack ) : boolean;
begin
if s.top = 0 then Empty := true else Empty := false;
end;
Procedure Push(var s : stack; x : real);
begin
if s.top = maxstack then writeln (' Stack overflow ')
else begin
s.top := s.top + 1; s.item[s.top] := x;
end;
end;
Function POP (var s: stack) : real;
begin
if Empty(s)
then writeln(' Stack underflow ')
else begin
pop := s.item[s.top];
s.item[s.top] := 0;
s.top := s.top - 1;
end;
end;
22 February 2017 < Narwen, M.Si > 31
Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data
function operasi(op1,op2:real; opr : char) : real;
begin
case opr of
'$' : operasi := exp(op2*ln(op1));
'*' : operasi := op1 * op2;
'/' : operasi := op1 / op2;
'+' : operasi := op1 + op2;
'-' : operasi := op1 - op2;
end;
end;
begin {----------- Program utama -----------}
clrscr;
write ('Masukkan Notasi Postfix : '); readln(E);
n := length(E); opndstk.top:=0; j := 1;
if n = 0 then writeln('Anda belum memasukkan ekspresi yang akan diuji');
while j <= n do
begin
if E[j] in ['0'..'9'] then
begin
val(E[j],nEj,er); push(opndstk,nEj);
end;
if E[j] in ['$','*','/','+','-'] then
begin
tops22:= pop(opndstk); tops21:= pop(opndstk);
h := operasi(tops21,tops22,E[j]); push(opndstk,h);
end;
writeln('Karakter ke-',j,' = ',E[j]) ; write('Stack Operand : ');
for jj := 1 to opndstk.top do write(opndstk.item[jj]:6:2);writeln;
j:=j+1;
end;
writeln ('Ekspresi ''',E,''' = ',pop(opndstk):6:2);
readln;
end.
22 February 2017 < Narwen, M.Si > 32
Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data

3.b. Mengkonversi notasi Infix ke notasi Postfix.


 Urutan operand dalam semua notasi bila dikonversikan harus sama
 Jadi, urutan operand dalam notasi postfix harus sama dengan urutan
operand dalam notasi infix.
 Notasi infix tanpa tanda kurung, hirarki operator sangat berpengaruh
 Buat fungsi bernilai boolean untuk memeriksa hirarki dari operator :
Prcd (op1,op2 : char) : boolean;
 bernilai „True’, jika op1 muncul mendahului op2 dlm ekspresi
 sebaliknya bernilai „False’.
Misalnya :
 prcd(‘*’,’+’) dan prcd(‘+’,’+’) bernilai true
 prcd(‘+’,’*’) dan prcd(‘$’,’$’) bernilai false.
 prcd(‘(’,opr) dan prcd(opr,’(’) bernilai false
 prcd(opr,’)’) bernilai true
 prcd(‘)’,’(’) tidak terdefinisi
33
22 February 2017 < Narwen, M.Si > 33
Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data

Algoritma mengkonversi notasi Infix ke notasi Postfix.


1) Masukan string infix (S)
2) Hitung panjang string infix (n)
3) Set opndstk kosong dan string postfix  „ „
4) Untuk i  1, 2, …, n maka lakukan
a) Jika Si adalah operand maka tambahkan Si ke string postfix
b) Jika Si tidak operand maka
 Selama opndstk tidak kosong dan prcd(top(opndstk), Si)
 Topsymb  pop(opndstk)
 tambahkan topsymb ke string postfix
 push(opndstk,Si)
5. Selama opndstk tidak kosong maka lakukan
 topsymb := pop(opndstk)
 tambahkan topsymb ke string postfix
6. Cetak string postfix

22 February 2017 < Narwen, M.Si > 34


Matematika FMIPA Catatan Kuliah
Universitas Andalas Struktur Data

Contoh. Konversi bentuk infix berikut ke bentuk postfix.


1. A + B * C
2. (A + B ) * C
3. ((( A – ( B + C )) * D ) $ (E + F))

22 February 2017 < Narwen, M.Si > 35

Anda mungkin juga menyukai