61 lines
1.3 KiB
ObjectPascal
61 lines
1.3 KiB
ObjectPascal
{Simple stack interface}
|
|
|
|
type TSimpleStack = class(TObject)
|
|
private
|
|
FStack: array of integer;
|
|
protected
|
|
public
|
|
procedure Push(I: integer);
|
|
function Pop(var I: integer): boolean;
|
|
constructor Create;
|
|
end;
|
|
|
|
|
|
{ TSimpleStack implementation }
|
|
|
|
constructor TSimpleStack.Create;
|
|
{Initialize stack by setting size to zero}
|
|
begin
|
|
SetLength(FStack,0);
|
|
end;
|
|
|
|
function TSimpleStack.Pop(var I: integer): boolean;
|
|
{Pop top item off stack into "I" returns False if stack empty}
|
|
begin
|
|
Result:=Length(FStack)>=1;
|
|
if Result then
|
|
begin
|
|
{Get item from top of stack}
|
|
I:=FStack[High(FStack)];
|
|
{Delete the top item}
|
|
SetLength(FStack,Length(FStack)-1);
|
|
end;
|
|
end;
|
|
|
|
procedure TSimpleStack.Push(I: integer);
|
|
{Push item on stack by adding to end of array}
|
|
begin
|
|
{Increase stack size by one}
|
|
SetLength(FStack,Length(FStack)+1);
|
|
{Insert item}
|
|
FStack[High(FStack)]:=I;
|
|
end;
|
|
|
|
|
|
procedure ShowStaticMethodCall(Memo: TMemo);
|
|
var Stack: TSimpleStack; {Declare stack object}
|
|
var I: integer;
|
|
begin
|
|
{Instanciate stack object}
|
|
Stack:=TSimpleStack.Create;
|
|
{Push items on stack by calling static method "Push"}
|
|
for I:=1 to 10 do Stack.Push(I);
|
|
{Call static method "Pop" to retrieve and display stack items}
|
|
while Stack.Pop(I) do
|
|
begin
|
|
Memo.Lines.Add(IntToStr(I));
|
|
end;
|
|
{release stack memory and delete object}
|
|
Stack.Free;
|
|
end;
|