Stack (Tumpukan) adalah Suatu kumpulan data yang seolah-olah ada data yang diletakkan di atas data yang lain.
Suatu hal yang perlu kita ingat adalah bahwa kita bisa menambah data (PUSH)dan mengambil data (POP) melalui ujung yang sama, yang disebut sebagai ujung atas tumpukan (Top of Stack).
Tumpukan menggunakan metode yang disebut LIFO (Last In First Out) yaitu Masuk terakhir keluar pertama.
Pendeklarasian Tumpukan
Const MaxElemen = 225;
Type Tumpukan = record
Isi: array[1.. MaxElemen] of integer;
Atas: 0.. MaxElemen;
End;
Var T: Tumpukan;
Operasi PUSH
Procedure PUSH(var T: Tumpukan; X: integer);
Begin
T.Atas:= T.Atas+1;
T.Isi[T.Atas]:=X;
end;
prosedure di atas tampaknya sudah mencukupi, tapi jika T.Atas sama dengan MaxElemen dan kita akan mem-push lagi, maka akan terjadi overflow, sehingga prosedur di atas perlu diubah menjadi:
Procedure PUSH(var T: Tumpukan; X: integer);
Begin
If T.Atas = MaxElemen then
Writeln(’TUMPUKAN SUDAH PENUH’);
Else
begin
T.Atas:= T.Atas+1;
T.Isi[T.Atas]:=X;
End;
end;
Operasi POP
Procedure POP(Var T: Tumpukan);
Begin
T.Atas := T.Atas-1
End;
Timbul pertanyaan seandainya tumpukan sudah kosong, lalu apa yang akan di-pop?, dengan demikian procedure di atas perlu di tambah testing untuk men-cek kosong tidaknya suatu tumpukan.
Procedure POP(Var T: Tumpukan);
Begin
If T.Atas = 0 then
Writeln (’TUMPUKAN SUDAH KOSONG’)
Else
T.Atas := T.Atas-1
End;
Contoh Pemakaian Program Tumpukan
Program Balik_Kalimat;
uses wincrt;
const Elemen = 255; {batas maximum karakter}
type S255 = string[Elemen];
Tumpukan = record
Isi : S255;
Atas: 0..Elemen
end;
var T : Tumpukan; {nama tumpukan}
I : integer; {pencacah}
Kalimat :S255; {kalimat yang dibalik}
procedure awalan (var T:Tumpukan);
{prosedur inisialisasi tumpukan}
Begin
T.Atas:=0
end;
procedure PUSH(var T:Tumpukan; X:Char);
{prosedur untuk memasukkan elemen ke dalam tumpukan}
begin
T.Atas:=T.Atas+1;
T.Isi[T.Atas]:=X
end;
function POP(var T:Tumpukan):char;
{fungsi untuk mengambil elemen dari tumpukan}
begin
POP:=T.Isi[T.Atas];
T.Atas:=T.Atas-1
end;
{program utama}
begin
clrscr;
awalan(T);
write('ISIKAN SEMBARANG KALIMAT: ');
readln(kalimat);
clrscr;
writeln('KALIMAT ASLI: ',kalimat);
writeln;
writeln('SETELAH DIBALIK: ');
for i := 1 to length(kalimat) do
PUSH(T,Kalimat[I]);
for i := 1 to length(kalimat) do
write(POP(T));
end.
Selasa, 18 November 2008
Langganan:
Posting Komentar (Atom)

1 komentar:
Sayang sekali, saya bidang saya antropologi politik. Kalau kasih komentar pasti nggak relevan.
Salam kenal aja.
Posting Komentar