bor

2A : Stack

bor
Dec 19th, 2012
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.08 KB | None | 0 0
  1. program Stack;
  2.  
  3. type
  4.   (* StackNodePtr это указатель на StackNode. *)
  5.   StackNodePtr = ^StackNode;
  6.   (* StackNode тип который состоит из двух переменных. *)
  7.   StackNode = record
  8.     prev : StackNodePtr;
  9.     value : Longint;
  10.   end;
  11.  
  12. var n, a : Longint;
  13.   line : String;
  14.   head : StackNodePtr; (* Голова (верхушка) стека *)
  15.  
  16. (* Вставляет в верхушку стека новое число inbound. *
  17.  * Возвращает новую верхушку стека. *)
  18. function Push(head : StackNodePtr; inbound : Longint) : StackNodePtr;
  19. var newb : StackNodePtr;
  20. begin
  21.   new(newb); (* Выделяем память для нового элемента *)
  22.   newb^.value := inbound; (* Заносим число *)
  23.   newb^.prev := head; (* Делаем указатель на старую верхушку *)
  24.   Push := newb; (* Теперь верхним элементом будет новый *)
  25. end;
  26.  
  27. (* Берёт число из верхушки стека и возвращает его.
  28.  * Не вызывайте эту функцию, если стек пуст! *)
  29. function Top(head : StackNodePtr) : longint;
  30. begin
  31.   Top := head^.value; (* Просто берём число с верхушки *)
  32. end;
  33.  
  34. (* Удаляет верхний элемент стека.
  35.  * Возвращает новую верхушку стека.
  36.  * Не вызывайте эту функцию, если стек пуст! *)
  37. function Pop(head : StackNodePtr) : StackNodePtr;
  38. begin
  39.   Pop := head^.prev; (* Новая верхушка теперь по указателю prev. *)
  40. end;
  41.  
  42. begin
  43.   head := nil;
  44.   Readln (n);
  45.   while n <> 0 do begin
  46.     Dec(n);
  47.     Readln(line);
  48.     if line[2] = 'u' then begin
  49.       (* push *)
  50.       Val(Copy(line, 6, Length(line) - 5), a);
  51.       head := Push(head, a);
  52.     end else if head <> nil then begin
  53.       (* pop head *)
  54.       Writeln(Top(head));
  55.       head := Pop(head);
  56.     end else begin
  57.       (* pop empty *)
  58.       Writeln('empty');
  59.     end;
  60.   end;
  61. end.
Advertisement
Add Comment
Please, Sign In to add comment