Реализуйте структуру данных "стек" - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

Реализуйте структуру данных "стек". Напишите программу, содержащую описание стека и моделирующую работу стека, реализовав все указанные здесь методы. Программа считывает последовательность команд и в зависимости от команды выполняет ту или иную операцию. После выполнения каждой команды программа должна вывести одну строчку. Возможные команды для программы: push n Добавить в стек число n (значение n задается после команды). Программа должна вывести ok. pop Удалить из стека последний элемент. Программа должна вывести его значение. back Программа должна вывести значение последнего элемента, не удаляя его из стека. size Программа должна вывести количество элементов в стеке. clear Программа должна очистить стек и вывести ok. exit Программа должна вывести bye и завершить работу. Входные данные Команды управления стеком вводятся в описанном ранее формате по 1 на строке. Гарантируется, что набор входных команд удовлетворяет следующим требованиям: максимальное количество элементов в стеке в любой момент не превосходит 100, все команды pop и back корректны, то есть при их исполнении в стеке содержится хотя бы один элемент. Выходные данные Требуется вывести протокол работы со стеком, по 1 сообщению в строке Примеры входные данные
push 3 push 14 size clear push 1 back push 2 back pop size pop size exit
выходные данные
ok ok 2 ok ok 1 ok 2 2 1 1 0 bye

Решение задачи: «Реализуйте структуру данных "стек"»

textual
Листинг программы
  1. Const SS = 'push  pop   back  size  clear exit  ';
  2. Type
  3.   Stk = ^tStk;
  4.   tStk = Record
  5.            A    : Integer;
  6.            Next : Stk;
  7.          end;
  8. Var
  9.   P    : Stk;
  10.   S    : String;
  11.   N,tt : Integer;
  12.  
  13. Procedure Push(Var pp : Stk; nn : Integer);
  14. Var T : Stk;
  15. Begin
  16.   New(T);
  17.   T^.A:=nn;
  18.   T^.Next:=pp;
  19.   pp:=T;
  20.   Writeln('ok');
  21. end;
  22.  
  23. Procedure Pop(Var pp : Stk);
  24. Var T : Stk;
  25. Begin
  26.   If pp<>nil then
  27.   Begin
  28.     Writeln(pp^.A);
  29.     T:=pp;
  30.     pp:=pp^.Next;
  31.     Dispose(T);
  32.   end;
  33. end;
  34.  
  35. Procedure Back(Var pp : Stk);
  36. Begin
  37.   If pp<>nil then Writeln(pp^.A);
  38. end;
  39.  
  40. Procedure Siz(Var pp : Stk);
  41. {Этот метод не очень корректен, т.к. нарушает правила работы со структурой тип "стек", но зато короче и проще.}
  42. {Если это принципиально, то рекомендую самим занятся реализацией второго стека для хранения/перекладывания значений с подсчётом их количества.}
  43. Var i : Integer;
  44.     T : Stk;
  45. Begin
  46.   i:=0;
  47.   T:=pp;
  48.   While T<>nil do
  49.   Begin
  50.     Inc(i);
  51.     T:=T^.Next;
  52.   end;
  53.   Writeln(i);
  54. end;
  55.  
  56. Procedure Clr(Var pp : Stk);
  57. Var T : Stk;
  58. Begin
  59.   While pp<>nil do
  60.   Begin
  61.     T:=pp;
  62.     pp:=pp^.Next;
  63.     Dispose(T);
  64.   end;
  65.   Writeln('ok');
  66. end;
  67.  
  68. Procedure Ext(Var pp : Stk);
  69. Begin
  70.   Clr(pp);
  71.   Writeln('bye');
  72. end;
  73.  
  74. Begin
  75.   P:=nil;
  76.   Repeat
  77.     Readln(S);
  78.     Val(Copy(S,Pos(' ',S)+1,Length(S)-Pos(' ',S)),N,tt);
  79.     If Pos(' ',S)>0 then S:=Copy(S,1,Pos(' ',S)-1);
  80. {    Case S of
  81.       'push'  : Push(P,N);
  82.       'pop'   : Pop(P);
  83.       'back'  : Back(P);
  84.       'size'  : Siz(P);
  85.       'clear' : Clr(P);
  86.       'exit'  : Ext(P);
  87.      end; }
  88.      Case Pos(S,SS) div 6 of
  89.        0 : Push(P,N);
  90.        1 : Pop(P);
  91.        2 : Back(P);
  92.        3 : Siz(P);
  93.        4 : Clr(P);
  94.        5 : Ext(P);
  95.      end;
  96.  Until S='exit';
  97. end.

Объяснение кода листинга программы

  1. В процедуре Push новый элемент со значением nn добавляется в стек, а указатель на предыдущий элемент сдвигается вправо.
  2. В процедуре Pop из стека удаляется верхний элемент, его значение выводится на экран, а указатель на предыдущий элемент сдвигается вправо. Если стек пуст, то ничего не происходит.
  3. В процедуре Back выводится значение верхнего элемента стека.
  4. В процедуре Siz (не совсем корректной) перебираются все элементы стека, начиная с верхнего, и увеличивается счетчик i на каждый элемент. В конце выводится значение счетчика.
  5. В процедуре Clr все элементы стека удаляются, начиная с верхнего, и выводится сообщение 'ok'.
  6. В процедуре Ext сначала очищается стек, затем выводится сообщение 'bye'.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы