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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.09.2015, 21:42   #1
Asya7
Пользователь
 
Аватар для Asya7
 
Регистрация: 30.11.2014
Сообщений: 65
По умолчанию Реализация стека через массив

Подскажите,1) является ли это стеком? Если да, то 2)всё ли правильно? (просто нет уверенности - много чего где написано, но того что надо не встретилось и пришлось всё самостоятельно писать) 3)Можно ли сказать, что делается через массив? (а то встретилось вот такое описание, где говориться, что тоже через массив - 4)так ли это?
Код:
const 
 maxn=100;
type 
 TElem = integer;
 TElements = array [1..maxn] of TElem;
 TStack = record
 Elements:Telements;
 Top:integer;
 end;
Приложены старания назвать правильно переменные и процедуры - 5)Можно сказать, что получилось?:
Вот мой код:
Код:
program Stack2;

const
   N = 10;

type
   TypeData = integer;
   tStack = array[0..N] of TypeData;

var
   d, stack: tStack;
   a, i, pos: integer;

function NotEl(st: tStack): boolean;
begin
   result := (pos <> 0);
end;

procedure Init(st: tStack);
begin
   pos := 0;
end;

procedure Push(k: TypeData);
begin
   if pos < N then begin
      stack[pos] := k;
      pos := pos + 1;
   end
   else writeln('stack полон'); 
end;

procedure Pop(var st: tStack );
begin
   if pos <> 0 then 
   begin
      pos := pos - 1;
      write(st[pos], ', '); 
      pop(st);
   end;
end;

begin
   Init(stack);
   Randomize;
   writeln('введены числа в стек:');
   a := 0;
   for i := 1 to n do 
   begin
      a := a + 1;
      d[i] := a;
      push(a);
   end;
   for i := 1 to n do
      write(d[i], ', ');
   writeln;
   writeln('после извлечения из стека:');
   if NotEl(stack) then
      pop(stack) 
   else
      writeln('стек пуст');
end.
Asya7 вне форума Ответить с цитированием
Старый 07.09.2015, 22:10   #2
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

Код:
;
   writeln('после извлечения из стека:');
   while NotEl(stack) do
      pop(stack);
   writeln('стек пуст');
вопросы, увы, не понял, написано мутно
замечания:
1) notEl => hasItems или же, что лучше, сделать isEmpty и писать "while not isEmpty(stack) do"
2) старайся не смешивать несколько разных действий.... у тебя вот pop и извлекает данные, и выводит... это "просто", да, но гибкости 0! например, меняется тип данных и тебе придётся исправлять их вывод в pop, хотя оно ни каким боком не связано
GreenWizard вне форума Ответить с цитированием
Старый 07.09.2015, 22:34   #3
Asya7
Пользователь
 
Аватар для Asya7
 
Регистрация: 30.11.2014
Сообщений: 65
По умолчанию

Спасибо! Вот, надеюсь так можно исправить - по крайней мере всё выводит правильно (в pop не осталось команды вывода):
Код:
 if IsEmpty(stack) then
   writeln('стек пуст')
   else
   begin
    while not IsEmpty(stack)  do begin
      pop(stack);
      write(stack[pos], ', '); 
      end;
      end;
end.
Asya7 вне форума Ответить с цитированием
Старый 07.09.2015, 22:51   #4
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

кстати, по поводу первого вопроса:
стек - это абстракция, некая такая сущность эфемерная, которая наделена рядом свойств, неким поведением...... в частности, стек определяет логику доступа к данным, но не способ хранения, поэтому его можно сделать и на массиве, и на списках, и вовсе, например, на основе таблицы в БД, которая в себе скрывает кучу всего, НО это будет всё тот же стек
GreenWizard вне форума Ответить с цитированием
Старый 07.09.2015, 23:13   #5
Asya7
Пользователь
 
Аватар для Asya7
 
Регистрация: 30.11.2014
Сообщений: 65
По умолчанию

GreenWizard, теперь понятно. Спасибо!
Asya7 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализация стека через динамическую структуру Asya7 Помощь студентам 4 03.09.2015 21:34
реализация стека через односвязный список snusnu Общие вопросы C/C++ 7 06.04.2014 23:59
реализация стека через массив el_gato_de_Ch Общие вопросы C/C++ 4 21.05.2013 22:40
Реализация стека через массив Quadrelle Паскаль, Turbo Pascal, PascalABC.NET 1 23.04.2013 07:55
Сортировка стека через массив D00M C++ Builder 6 22.05.2012 20:54