Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.30;
Скачать: CL | DM;

Вниз

Стек на Паскале   Найти похожие ветки 

 
plague   (2002-12-18 17:59) [0]

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


 
Skier ©   (2002-12-18 18:01) [1]

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


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

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


 
han_malign ©   (2002-12-18 18:09) [3]

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


 
Skier ©   (2002-12-18 18:10) [4]

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


 
plague   (2002-12-18 18:13) [5]

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


 
Skier ©   (2002-12-18 18:16) [6]

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


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

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


 
Skier ©   (2002-12-18 18:38) [8]

>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;


 
Skier ©   (2002-12-18 18:42) [9]

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

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) [10]

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


 
Anatoly Podgoretsky ©   (2002-12-18 18:43) [11]

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


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

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


 
Anatoly Podgoretsky ©   (2002-12-18 19:08) [13]

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



Страницы: 1 вся ветка

Текущий архив: 2002.12.30;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.018 c
7-99383
pag77
2002-10-03 02:42
2002.12.30
можно ли в Windows XP заблокировать contr+alt+del?


4-99408
EminEM2
2002-11-12 05:38
2002.12.30
Расскажите про Wparam и Lparam


1-99062
Skywalker
2002-12-19 13:54
2002.12.30
Как програмно получить билд приложения.


3-99004
Picco
2002-12-10 16:01
2002.12.30
Unknow token received from SQLSERVER


1-99053
tolik2003
2002-12-19 11:15
2002.12.30
закачка файла в инет и скачивание его оттуда