а тебе обязательно стек реализовывпть именно как запись с указателем? Просто для строкового стека удобнее работать с TStringList, обернув его в свой класс.
Код:
type
TStringStack = class
private
FStorage : TStringList;
public
constructor Create;
destructor Destroy; override;
procedure Posh(S : String);
function Pop : String;
function IsEmpty : Boolean;
procedure AssignToMemo(AMemo : TMemo);
end;
implementation
procedure TStringStack.Push(S : String);
begin
If Length(S) < 10 Then Raise Exception.Create('String too short');
Fstorage.Insert(0,S); // Кажется так.
end;
function TStringStack.Pop : String;
begin
If IsEmpty Then Raise Exception.Create('Stack is empty');
Result := FStorage[0];
FStorage.Delete(0);
end;
function TStringStack.IsEmpty : Boolean;
begin
Result := FStorage.Count = 0;
end;
constrictor TStringStack.Create;
begin
inherited;
FStorage := TStringList.Create;
end;
destructor TStringStack.Destroy;
begin
FStorage.Free;
inherited;
end;
procedure TStringStack.AssignToMemo(AMemo : TMemo);
begin
AMemo.Lines.Assign(FStorage As TStrings);
end;
В приведенном примере метод AssignToMemo копирует содержимое стека в Memo.