Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2009, 21:58   #1
tatu_cat_69
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 10
По умолчанию Реализация операций со стеком Pascal

ну собственно нужно реализовать операции работы со стеком на основе:

1) массива
2) динамической структуры

Код:
program stacktest;
const maxn=100;
type TElem = integer;
TElements = array [1..maxn] of TElem;
TStack = record
Elements:Telements;
Top:integer;
end;
procedure Stack_init (var s:Tstack);
begin
S.top:=0;
end;
function Stack_IsEmpty (s:Tstack):boolean;
begin
Stack_Isempty:=(s.top=0)
end;
Procedure Stack_push (var s:Tstack; E:Telem);
const errorcode = 225;
begin
with s do
if top <maxn
then
begin
top:=top+1;
Elements[top]:=E;
end
Else
begin
Writeln('perepol stek');
Halt (errorcode)
end
end;
function Stack_push_func (var s:Tstack; E:Telem):boolean;
begin
with s do
if top<maxn
then
begin
top:=top+1;
elements[top]:=e;
stack_push_func:=true
end
else
stack_push_func:=false
end;
function Stack_IsEmpty (s:Tstack):Telem;
Const ErrorCode = 255;
begin
if stack_isempty (s)
then
begin
writeln('izvlech el iz steka');
halt (errorCode)
end
else
with s do
begin
stack_pop:=Elements[top];
top:=top-1
end
end;
begin
Cost maxN=100;
Stack_init (stack);
writeln (stack_isempty = stack_isempty(stack));
write('vvedite 1 el ');
readln(e);
stack_push(stack.e);
while not stack_isempty(stack) do
writeln(stack_pop(stack));
writeln('vvedite enter');
readln;
end.
прошу помочь подправить код программы на основе массива.
И если можно то помогите с динимаческими данными.
Я просто вообще не шарю.
tatu_cat_69 вне форума Ответить с цитированием
Старый 16.11.2009, 21:02   #2
diliana
Форумчанин
 
Аватар для diliana
 
Регистрация: 24.05.2009
Сообщений: 119
По умолчанию

tatu_cat_69

вы написали
Код:
const 
 maxn=100;
type 
 TElem = integer;
 TElements = array [1..maxn] of TElem;
 TStack = record
 Elements:Telements;
 Top:integer;
 end;
но по-моему так стек на основе массива не описывают
я думаю это должно быть вот так

Код:
const
   n=100;{ макс размер стека }
type
  data = integer;    { эл-ты могут иметь любой тип }
  TMass = array [1..n] of data;

var
 StA:TMass ;
 sp : integer;  { Указатель на вершину стека}

А динамический стек описывают так

Код:
Тype
  stek = ^TStek;{ссылочный тип}
  TStek=Record{базовый тип-запись}
  	data : integer;
  	next : stek;
  end;

Var
  sp: stek;{указатель вершины}
diliana вне форума Ответить с цитированием
Старый 17.11.2009, 08:40   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но по-моему так стек на основе массива не описывают
Почему же?
Вполне описывают.
Причем у автора в запись обьеденен стек и указатель на его вершину - это Гут. А вот динамический стек ты верно указала.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.11.2009, 17:44   #4
diliana
Форумчанин
 
Аватар для diliana
 
Регистрация: 24.05.2009
Сообщений: 119
По умолчанию

Stilet
Цитата:
А вот динамический стек ты верно указала.
с динамическим стеком все понятно

Цитата:
Почему же?
Вполне описывают.
Причем у автора в запись обьеденен стек и указатель на его вершину - это Гут.
Что-то мне не ясно...
Мой препод обьяснял это по-другому. Я не поленилась и еще раз перечитала лекцию по стеку и в теме - статическая реализация стека - говориться, что для реализации такого стека надо обьявить
* массив
* и одну переменную - указатель вершины стека - (sp)
В этом случае такая Структура данных как «записи» не вводиться.

При представлении стека в статической памяти для стека выделяется память, как для одномерного массива.
В дескрипторе этого одномерного массива кроме обычных для него параметров должен находиться также указатель стека - адрес вершины стека.
Указатель стека может указывать либо на первый свободный элемент стека, либо на последний записанный в стек элемент.
(Все равно, какой из этих двух вариантов выбрать, важно в последствии строго придерживаться его при обработке стека.) В дальнейшем мы будем всегда считать, что указатель стека адресует первый свободный элемент и стек растет в сторону увеличения адресов.
При занесении элемента в стек элемент записывается на место, определяемое указателем стека, затем указатель модифицируется таким образом, чтобы он указывал на следующий свободный элемент (если указатель указывает на последний записанный элемент, то сначала модифицируется указатель, а затем производится запись элемента).
Модификация указателя состоит в прибавлении к нему или в вычитании из него единицы (помните, что наш стек растет в сторону увеличения адресов).


А вот при динамической реализации стека вводят ссылочний тип и базовый тип-запись и указатель на вершину стека.

tatu_cat_69 пишет
Цитата:
прошу помочь подправить код программы на основе массива.
И если можно то помогите с динимаческими данными.
И выдает такой код. Разве это статическая реализация стека ???
Код:
const 
 maxn=100;
type 
 TElem = integer;
 TElements = array [1..maxn] of TElem;
 TStack = record
 Elements:Telements;
 Top:integer;
 end;

Последний раз редактировалось diliana; 17.11.2009 в 18:15.
diliana вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа со стеком (С++) Olya90 Помощь студентам 14 30.04.2009 00:03
Задача со стеком host.pro Помощь студентам 1 12.03.2009 12:48
Помогите с программированием операций обработки файлов(Pascal) Дима82 Помощь студентам 11 24.05.2008 18:02