![]() |
|
|
#1
|
|||
|
|||
|
Привет Всем !
Воник такой вопрос, Как понять стек с неизменным указателем вершины, и как его можно реализовать ? Спасибо) |
|
#2
|
|||
|
|||
|
А стек он всегда и есть с постоянным указателем вершины.
Стек - это очередь типа FILO. Реализуется на любом списковом классе, да хоть на массиве. Суть стека в том, что в каком порядке ты теда засовываешь данные, то в таком же и вынимаешь. Например, для типа Integer реализация стека будет примерно такая: Код:
type
TIntStack = class
private
FItems : TList;
public
constructor Create;
destructor Destroy; override;
procedure Push(AItem : Integer);
function Pop : Integer;
end;
constructor TIntStack.Create;
begin
inherited;
FItems := TList.Create;
end;
destructor TIntStack.Destroy;
begin
FItems.Free;
inherited;
end;
procedure TIntStack.Push(AData : Integer);
begin
FItems.Insert(0,Pointer(AData));
end;
function TIntStack.Pop : Integer;
begin
If FItems.Count = 0 Then Raise Exception.Create('Stack is empty');
Result := Integer(FItems[0]);
FItems.Delte(0);
end;1. Могут быть опечатки, т.к. писал здесь. 2. Специально сделал для отдельного типа. Если надо - переделай для типа Variant. |
|
#3
|
|||
|
|||
|
Или тебе надо на связанных списках сделать? Очень уж нехочется возиться с указателями. Принцип примерно такой же, тем более, что все равно для удобства пользования надо оборачивать все в класс, а тогда детали реализации не так важны.
|
|
#4
|
|||
|
|||
|
Да задача сделать это в паскале))
Но кажется я уже нашел пример, спасибо тебе |