![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Стек на Паскале
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