Pointer5. Дан указатель $$P_1$$ на вершину непустого стека. Извлечь из стека первый (верхний) элемент и вывести его значение $$D$$, а также адрес $$P_2$$ новой вершины стека. Если после извлечения элемента стек окажется пустым, то положить $$P_2=nil$$. После извлечения элемента из стека освободить память, занимаемую этим элементом.
Решение:
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 |
program Pointer4; type PNode=^TNode; TNode=record Data: Integer; Next: PNode; // Prev: 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; var P1,P2:PNode; a:^Word; D:integer; begin CreateStack(P1); D:=p1.Data; if p1.Next<>nil then p2:= P1.Next else p2:=nil; Dispose(P1); a:=Addr(P2); Writeln('Data:',D); Writeln('P2^: ',a^); end. |
Другие задачи из раздела Pointer можно посмотреть здесь.
Решение для PT4 (стек уже заполнен где-то в тестах):
Решение с заполнением стека: