Pointer13. Дан указатель $$P_1$$ на вершину стека. Используя тип TStack (см. задание Pointer11), описать функции StackIsEmpty($$S$$) логического типа (возвращает True, если стек $$S$$ пуст, и False в противном случае) и Peek($$S$$) целого типа (возвращает значение вершины непустого стека $$S$$, не удаляя ее из стека). В обеих функциях переменная $$S$$ является входным параметром типа TStack. С помощью этих функций, а также функции Pop из задания Pointer12, извлечь из исходного стека пять элементов (или все содержащиеся в нем элементы, если их менее пяти) и вывести их значения. Вывести также значение функции StackIsEmpty для результирующего стека и, если результирующий стек не является пустым, значение и адрес его новой вершины.
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
program Pointer13; type PNode=^TNode; TNode=record Data: Integer; Next: PNode; // Prev: PNode; end; TStack=record Top:PNode; end; procedure CreateStack(var P1:PNode); var p:PNode; i,N:integer; begin Write('N:'); Readln(N); p1:=nil; for i:=1 to N do begin new(p); Write('num: '); Readln(P^.Data); p^.Next := P1; P1:=p; end; end; function pop(var S:TStack):integer; var head: PNode; begin Result:=S.Top.Data; head:=S.Top.Next; Dispose(S.Top); S.Top:=head; end; function StacklsEmpty(S:TStack):boolean; begin if S.Top = nil then StacklsEmpty:=True else StacklsEmpty:=False; end; function Peek(S:TStack):integer; begin Peek:=S.Top.Data; end; var S:TStack; i:integer; a:^Word; begin CreateStack(S.Top); For i:=1 to 5 do if not(StacklsEmpty(S)) then Writeln(Pop(S)); if not(StacklsEmpty(S)) then begin Writeln('Data head:', Peek(S)); a:=Addr(S.Top); Writeln('addres:',a^); end; end. |
Другие задачи из раздела Pointer можно посмотреть здесь.
Комментарии:
Комментарии 1