Реализуйте структуру данных "стек" - 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
Листинг программы
Const SS = 'push  pop   back  size  clear exit  ';
Type
  Stk = ^tStk;
  tStk = Record
           A    : Integer;
           Next : Stk;
         end;
Var
  P    : Stk;
  S    : String;
  N,tt : Integer;
 
Procedure Push(Var pp : Stk; nn : Integer);
Var T : Stk;
Begin
  New(T);
  T^.A:=nn;
  T^.Next:=pp;
  pp:=T;
  Writeln('ok');
end;
 
Procedure Pop(Var pp : Stk);
Var T : Stk;
Begin
  If pp<>nil then
  Begin
    Writeln(pp^.A);
    T:=pp;
    pp:=pp^.Next;
    Dispose(T);
  end;
end;
 
Procedure Back(Var pp : Stk);
Begin
  If pp<>nil then Writeln(pp^.A);
end;
 
Procedure Siz(Var pp : Stk);
{Этот метод не очень корректен, т.к. нарушает правила работы со структурой тип "стек", но зато короче и проще.}
{Если это принципиально, то рекомендую самим занятся реализацией второго стека для хранения/перекладывания значений с подсчётом их количества.}
Var i : Integer;
    T : Stk;
Begin
  i:=0;
  T:=pp;
  While T<>nil do
  Begin
    Inc(i);
    T:=T^.Next;
  end;
  Writeln(i);
end;
 
Procedure Clr(Var pp : Stk);
Var T : Stk;
Begin
  While pp<>nil do
  Begin
    T:=pp;
    pp:=pp^.Next;
    Dispose(T);
  end;
  Writeln('ok');
end;
 
Procedure Ext(Var pp : Stk);
Begin
  Clr(pp);
  Writeln('bye');
end;
 
Begin
  P:=nil;
  Repeat
    Readln(S);
    Val(Copy(S,Pos(' ',S)+1,Length(S)-Pos(' ',S)),N,tt);
    If Pos(' ',S)>0 then S:=Copy(S,1,Pos(' ',S)-1);
{    Case S of
      'push'  : Push(P,N);
      'pop'   : Pop(P);
      'back'  : Back(P);
      'size'  : Siz(P);
      'clear' : Clr(P);
      'exit'  : Ext(P);
     end; }
     Case Pos(S,SS) div 6 of
       0 : Push(P,N);
       1 : Pop(P);
       2 : Back(P);
       3 : Siz(P);
       4 : Clr(P);
       5 : Ext(P);
     end;
 Until S='exit';
end.

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

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

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


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

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

7   голосов , оценка 4 из 5
Похожие ответы