Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Стеки

Автор: -Наська- 16.12.2007 1:37

Блин эти фиговы штуки... Теорию поняла... хочу вывести в Мемо. как ето сделать? blink.gif

Автор: Scorp_Freeman 16.12.2007 14:46

Memo1.Clear;

bufS:=stek;
while bufS<>nil do
begin
Memo1.Lines.Add(bufS.FIO);
bufS:=bufS.Prev;
end;

где stek-вершина стека, bufS.Prev-указатель на предыд. узел, bufS.FIO - поле которое хочешь вывести

Автор: -Наська- 16.12.2007 23:53

Смотрите такой прикол - у меня генериться рандомно стек из 10 элементов. у мя есть кнопка добавить и так как ето стек, то "последний пришел, первый вышел". Мну не знаю. это к одной кнопке две функции привязать. че написать что б первый убирал. или просто как со списком сделать. или эту функцию оставить?

procedure TStack.Push(a: string);
var P:PNode;
begin
new(P);
P.Next := head;
head := P;
P.Info := a;
Stsize := Stsize + 1;
end;

procedure TStack.Pop (var a: string);
var P: PNode;
begin
if not Empty then
begin
P := FNode;
FNode := P.Next;
a := P.Info;
dispose(P);
end;
end;

{кнопка вставить}
procedure TForm1.Button1Click(Sender: TObject);
var
ch: string;
i: integer;
begin
{Stack := TStack.Create;}
i := 1;
ch := Memo2.Lines [0];
Stack.Push(ch);
{stack.Pop(head); }
inc(i);
end;

{кнопка список}
procedure TForm1.Button2Click(Sender: TObject);
var
P: Pnode;
begin
Memo1.Clear;
New(P);
P := head;
while P <> nil do
begin
Memo1.Lines.Add(P.Info);
P := P.Next;
end;
dispose(p);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
P: PNode;
begin
stolbik:='';
p := head;
Randomize;
for n:= 1 to 10 do
begin
new (p);
p.Info:= IntToStr(Random(15));
stolbik := '';
p.Next := head;
head := p;
stolbik := stolbik + p.Info + #13;
p := p.Next;
end;
end;



Автор: Гость 17.12.2007 2:28

Ладно...с этим со всем вроде разобралась. а вот смысл очереди для меня остается загадочным...
первый пришел, первый ушел. эт как?
допустим у мя массив(ну очередь) 1 2 3 4 5
я ввожу 9. и че получается 9 2 3 4 5?

Автор: andriano 17.12.2007 2:57

Стек - труба открытая с одной стороны. Иначе называется магазин. С одной стороны вставляем патроны и с того же конца их в обратном порядке достаем.
А очередь - труба открытая с двух сторон: с одной стороны в нее запихиваем, а с другой - достаем. Естественно, в том же порядке, что и запихнули.

Кстати, у меня сложилось впечатление, что ты не совсем верно представляешь механизм функционирования стека: "пришел" и "ушел" - две разные операции, а не одна.
т.е.

Стек:
12345
запихиваем 9 -> 912345
достаем(9) -> 12345

Очередь:
12345
запихиваем -> 912345
достаем (5) - 91234

Автор: volvo 17.12.2007 2:58

Цитата
смысл очереди для меня остается загадочным...

Было: <1, 2, 3, 4, 5>
Добавляешь 9: <1, 2, 3, 4, 5, 9>
Читаешь один элемент - читается 1... То есть, добавляется информация в конец, а читается с начала...

Автор: -Наська- 17.12.2007 13:39

Спасиб. На конец-то все по полочкам разложилось blum.gif