Форум: "Основная";
Текущий архив: 2002.12.30;
Скачать: [xml.tar.bz2];
ВнизСтек на Паскале Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.013 c