Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program Stack;
- type
- (* StackNodePtr это указатель на StackNode. *)
- StackNodePtr = ^StackNode;
- (* StackNode тип который состоит из двух переменных. *)
- StackNode = record
- prev : StackNodePtr;
- value : Longint;
- end;
- var n, a : Longint;
- line : String;
- head : StackNodePtr; (* Голова (верхушка) стека *)
- (* Вставляет в верхушку стека новое число inbound. *
- * Возвращает новую верхушку стека. *)
- function Push(head : StackNodePtr; inbound : Longint) : StackNodePtr;
- var newb : StackNodePtr;
- begin
- new(newb); (* Выделяем память для нового элемента *)
- newb^.value := inbound; (* Заносим число *)
- newb^.prev := head; (* Делаем указатель на старую верхушку *)
- Push := newb; (* Теперь верхним элементом будет новый *)
- end;
- (* Берёт число из верхушки стека и возвращает его.
- * Не вызывайте эту функцию, если стек пуст! *)
- function Top(head : StackNodePtr) : longint;
- begin
- Top := head^.value; (* Просто берём число с верхушки *)
- end;
- (* Удаляет верхний элемент стека.
- * Возвращает новую верхушку стека.
- * Не вызывайте эту функцию, если стек пуст! *)
- function Pop(head : StackNodePtr) : StackNodePtr;
- begin
- Pop := head^.prev; (* Новая верхушка теперь по указателю prev. *)
- end;
- begin
- head := nil;
- Readln (n);
- while n <> 0 do begin
- Dec(n);
- Readln(line);
- if line[2] = 'u' then begin
- (* push *)
- Val(Copy(line, 6, Length(line) - 5), a);
- head := Push(head, a);
- end else if head <> nil then begin
- (* pop head *)
- Writeln(Top(head));
- head := Pop(head);
- end else begin
- (* pop empty *)
- Writeln('empty');
- end;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment