Thursday, July 22, 2010

stack balik kata linked list pascal

program stack;
uses crt;

type
  tipeinfo=integer;
  tipeptr=^tipenode;
  tipenode =record
    info :char;
    next:tipeptr;
  end;
  tipestack=tipeptr;

var stackpointer:tipestack;
    data: tipeinfo;
    kata:string;
    i:byte;
procedure inisialisasi(var mystack:tipestack);
begin
  new(mystack);
  mystack:=nil;
end;

function stackkosong(var mystack:tipestack):boolean;
begin
         stackkosong:=mystack=nil;
end;

procedure push(var mystack:tipestack; infobaru:char);
var nodebaru:tipeptr;
begin
  new(nodebaru);
  nodebaru^.info:=infobaru;
  nodebaru^.next:=mystack;
  mystack:=nodebaru;
end;


function pop(var mystack:tipestack):char;
var
temp:tipeptr;

begin
if not(stackkosong(mystack)) then
   begin
     pop:=mystack^.info;
     temp:=mystack;
     mystack:=mystack^.next;
     dispose(temp);
   end;
end;


procedure cetak(mystack:tipestack);
var temp:tipestack;
begin
temp:=mystack;

while (mystack<>nil) do
begin
writeln(mystack^.info);
mystack:=mystack^.next;
end;
end;

begin


inisialisasi(stackpointer);
{push(stackpointer,5);
push(stackpointer,2);
push(stackpointer,9);
cetak(stackpointer);
writeln(pop(stackpointer));}

readln(kata);
for i:=1 to length(kata) do
begin
  push(stackpointer,kata[i]);
  write(kata[i]);
end;
writeln;
for i:=1 to length(kata) do
begin
  write(pop(stackpointer));
end;


readln;

end.

No comments: