PRAKTIKUM STRUKTUR DATA
Implementasi Stack dengan Pointer
Kegiatan 1 : Implementasi Stack untuk membalik kalimat
- Tuliskan kode program di bawah ini ke dalam editor pascal!
- Compile dan jalankan program, dan analisa hasilnya!
- Kesimpulan apa yang Anda dapat dari percobaan program ini?
Program BALIK_KALIMAT;
uses crt;
const Elemen = 255; {* batas maksimum karakter *}
type typearray = string[Elemen];
typeStack = record
Isi : typearray;
Atas : 0..Elemen
end;
var T : typestack; {* nama tumpukan *}
I : integer; {* pencacah *}
Kalimat : typearray; {* kalimat yang dibalik *}
{**********************************
* Prosedur inisialisasi tumpukan *
********************************** }
procedure buatstack (var T : TYPESTACK);
begin
T.Atas := 0
end; {* prosedur AWALAN *}
* Prosedur untuk memasukkan elemen ke dalam *
*********************************************}
procedure PUSH (var T : TYPESTACK; X : char);
begin
T.Atas := T.Atas + 1;
T.Isi[T.Atas] := X
end; {* prosedur PUSH *}
{***********************************************
* Fungsi untuk mengambil elemen dari tumpukan *
***********************************************}
function POP (var T : Typestack) : char;
begin
POP := T.Isi[T.Atas];
T.Atas := T.Atas - 1
end; {* fungsi POP *}
{*****************
* Program utama *
*****************}
begin
clrscr;
Buatstack(T);
writeln('TUMPUKAN UNTUK MEMBALIK KALIMAT');
writeln('-------------------------------');
writeln;
write('Isikan sembarang kalimat: ');
readln(Kalimat);
clrscr;
writeln('KALIMAT ASLI:'); writeln(Kalimat);
writeln;writeln('SETELAH DIBALIK:');
{* Mempush kalimat ke dalam tumpukan *}
for I := 1 to length(Kalimat) do
PUSH (T, Kalimat[I]);
* kalimat yang dibaca terbalik pembacaannya *}
for I := 1 to length(Kalimat) do
write(POP(T));
readln;
end. {* program utama *}
Kegiatan 2 : Implementasi Stack dengan Pointer
- Tuliskan kode program di bawah ini ke dalam editor pascal!
- Compile dan jalankan program, analisa proses dan hasilnya!
- Kesimpulan apa yang Anda dapat dari program ini?
program stack_pointer1;
uses crt;
type typeInfo=integer;
typePtr=^typenode;
typenode=record
info:typeinfo;
next:typePtr;
end;
typestack=typePtr;
var stack:typestack;
begin
new(stack);
stack:=nil;
end;
Function StackKosong(stack:typestack):boolean;
begin
stackkosong:=(stack=nil);
end;
Procedure Push(var Stack:typestack; IB:typeInfo);
var NB:typePtr;
begin
new(NB);
NB^.info:=IB;
NB^.next:=stack;
stack:=NB;
end;
Procedure Pop(var Stack:typestack; var infopop:typeInfo);
var Temp:typePtr;
begin
if not (stackkosong(stack)) then
begin
new(temp);
temp:=stack;
infopop:=stack^.info;
stack:=stack^.next;
dispose(temp);
end;
end;
begin
buatstack(stack);
push(stack,3);
push(stack,6);
push(stack,8);
pop(stack,x);
push(stack,9);
while stack^.info <> 0 do
begin
writeln(stack^.info);
stack:=stack^.next;
end;
readln;
end.
Tidak ada komentar:
Posting Komentar