Показать сообщение отдельно
  #2  
Старый 20.03.2010, 02:01
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

а тебе обязательно стек реализовывпть именно как запись с указателем? Просто для строкового стека удобнее работать с 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.
Ответить с цитированием