Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Стек на Паскале


plague ©   (2002-12-18 17:59:00) 

Народ, подскажите плиз как сабж на Паскале юзать! Что такое стек я знаю, но вот как с ним работать? Типа создать стек, добавить данные, удалить данные. Вот такого типа вопросы меня интересуют. Если можно ма-а-аленький примерчик.


Anatoly Podgoretsky   (2002-12-18 19:08:00) [1]

Бывало, но это всегда моя проблема.


plague   (2002-12-18 18:45:00) [2]

2 Anatoly Podgoretsky, интересно, а у тебя такое бывало, когда работа "горела"? Или нет?


Anatoly Podgoretsky   (2002-12-18 18:43:00) [3]

plague (18.12.02 18:18)
Тебе некогда, а другим есть когда, может тебе и пальцы загибать?


Skier   (2002-12-18 18:42:00) [4]

Ошибка закралась...

procedure Push(var AStack : TStack; const AValue : Integer);
begin
if AStack.Top = 0 then ShowMessage("Стэк заполнен !")
else begin
AStack.Data[AStack.Top] := AValue;
AStack.Top := AStack.Top - 1;
end;
end;

procedure Pop(var AStack : TStack; var AValue : Integer);
begin
if AStack.Top > ASize then ShowMessage("Стэк пуст !")
else begin
AValue := AStack.Data[AStack.Top];
AStack.Top := AStack.Top + 1;
end;
end;


plague   (2002-12-18 18:42:00) [5]

2 Skier Ух ты! Спасибо. Щас буду разгребать!


Skier   (2002-12-18 18:38:00) [6]

>plague

Ну вот примерно...

const
ASize = 64;
type
TStack = packed record
Data : array[1..ASize] of Integer;
Top : Integer;
end; //TStack
var
Stack : TStack;

//Очистить Stack
procedure EmptyStack(var AStack : TStack);
begin
AStack.Top := ASize;
end;

//записать значение в Stack
procedure Push(var AStack : TStack; const AValue : Integer);
begin
if AStack.Top = 1 then ShowMessage("Стэк заполнен !")
else begin
AStack.Data[AStack.Top] := AValue;
AStack.Top := AStack.Top - 1;
end;
end;

//снять значение со Stack-а
//AValue результат в AValue
procedure Pop(var AStack : TStack; var AValue : Integer);
begin
if AStack.Top = ASize then ShowMessage("Стэк пуст !")
else begin
AValue := AStack.Data[AStack.Top];
AStack.Top := AStack.Top + 1;
end;
end;


plague   (2002-12-18 18:18:00) [7]

2 Skier, блин да некогда мне книжки читать. Мне до завтра надо сделать. Пример можешь дать?


Skier   (2002-12-18 18:16:00) [8]

>plague
Стандартно...
А что тебя пугает.
Почитай об этом у Альфреда Ахо и Джеффи Ульмана
"Алгоритмы и структуры данных" (если я не ошибаюсь...)


plague   (2002-12-18 18:13:00) [9]

2 skier ??? Это как? При помощи массива?


Skier   (2002-12-18 18:10:00) [10]

>plague
Ну тогда проще
1) Используй TList или его потомок (это будет красивее...)
2) или представь стэк с помощью массива.


han_malign   (2002-12-18 18:09:00) [11]

TStack - Peek,Pop,Push
структуры данных последовательного доступа
стек - "первым вошел - последним вышел"
очередь - "первым вошел - первым вышел"(FIFO - first in - first out)
дек - вход с одной стороны, а выход с обоих


plague   (2002-12-18 18:07:00) [12]

2 skier. В том то и дело что надо сделать на чистом Паскале. Без асмы. Это задание на РГЗ, а препод в универе в asme не рубит.


Skier   (2002-12-18 18:01:00) [13]

>plague
Почитай про ассемблерные команды push и pop


Наверх

Титульная страница Поиск, карта сайта Написать письмо