Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Тип данных в стиле стека


Автор: Gorcer 23.7.2004, 12:13
Как в Delphi реализовать данные в виде стека, тоесть........

Я хочу добавлять в конец массива данные, и при удалении какихто данных из середины масива. он должен сдвигаться,......

Методы сортировки и сдвигов массива непредлагайте!

Автор: <Spawn> 23.7.2004, 12:32
Gorcer Используй класс TStack из модуля Contnrs.

Автор: Gorcer 23.7.2004, 12:58
Огромное спасибо, а я ищу просто Stek, и нифига немогу найти.
Чтоб я без вашего форума бы делал? rolleyes.gif

Автор: Sardar 23.7.2004, 13:11
Вроде простой связанный список должен быть...

Автор: Dynamic 25.7.2004, 08:53
Цитата
Как в Delphi реализовать данные в виде стека, тоесть........

Я хочу добавлять в конец массива данные, и при удалении какихто данных из середины масива. он должен сдвигаться,......

Имхо, если данные можно удалять из середины стека, то это уже не стек.

Автор: Gorcer 27.7.2004, 11:48
Нехочу показаться ламером (хотя это неизбежно) но как правильно push и pull делать?

Есть
Код

TMyRecord= record
ProcName:string;
ProcParam:array of Variant;
end;

Var
Stek:array of TMyRecord


Хочу, чтобы у меня всё это было не в массиве а в стеке!

Стек содержит только указатели на переменныеsad.gif
Как мне вставлять Туда записи и брать их оттудова?

Помогите плиз, а то я даже непредставляю как это правильно сделать, все мои начинания заканчивались тупикамиsad.gif


Автор: Dynamic 27.7.2004, 12:45
Вобщем, я думаю, что-то типа этого:
Код
uses ...,  cntnrs;

type
   PMyRecord = ^TMyRecord;
   TMyRecord= record
    ProcName:string;
    ProcParam:array of Variant;
   end;

 TForm1 = class(TForm)
   procedure FormCreate(Sender: TObject);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
 private
   Stack: TStack;
 public
   procedure Push(P: PMyRecord);
   function Pop: PMyRecord;
   procedure AddToStack(MyRec: TMyRecord);
   procedure GetFromStack(var MyRec: TMyRecord);
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
    Stack := TStack.Create;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    Stack.Free;
end;

function TForm1.Pop: PMyRecord;
begin
    Result := PMyRecord(Stack.Pop);
end;

procedure TForm1.Push(P: PMyRecord);
begin
    Stack.Push(P);
end;

procedure TForm1.AddToStack(MyRec: TMyRecord);
var p: PMyRecord;
   len: integer;
begin
    New(p);
    with p^ do
    begin
      ProcName := 'Proc1';
      len := Length(ProcParam) + 1;
      SetLength(ProcParam, len);
      ProcParam[len] := 'MyParam';
    end;
    Push(p);
end;

procedure TForm1.GetFromStack(var MyRec: TMyRecord);
begin
    MyRec := Pop^;
end;

Автор: Gorcer 27.7.2004, 14:06
Болшьшое спасибо! biggrin.gif

Автор: Петрович 29.7.2004, 22:06
Вообще то, в модуле Contnrs есть тип TStack реализующий функциональность стека.

Автор: Dynamic 29.7.2004, 22:20
Именно он и был использован в примере, посмотрите внимательней. А также вопрос, предшествующий примеру.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)