Pointer2. Дан адрес $$P_1$$ записи типа TNode. Эта запись связана полем Next со следующей записью того же типа, она, в свою очередь, — со следующей, и так далее до записи, поле Next которой равно $$nil$$ (таким образом, возникает цепочка связанных записей). Вывести значения полей Data для всех элементов цепочки, длину цепочки (то есть число ее элементов) и адрес ее последнего элемента.
Решение:
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 |
program Pointer2; type PNode=^TNode; TNode=record Data: Integer; Next: PNode; // Prev: PNode; end; //реализация функции CreateStack не входит в задание, стек появляется из неоткуда. procedure CreateStack(var P1:PNode); var p,q:PNode; i,N:integer; begin Write('N:'); Readln(N); New(P1); Write('data: '); Readln(P1^.Data); P1^.Next := nil; q:=P1; for i:=1 to N-1 do begin new(p); Write('data: '); Readln(P^.Data); p^.Next := nil; q^.Next := p; q:=q^.Next end; end; //для решнеия необходимо реализовать только функцию ViewStack(...) procedure ViewStack(P1:PNode); var p:PNode; a:^Word; len:integer; begin len:=1; p := p1; a:=Addr(p); while p <> nil do begin inc(len); WriteLn(p^.Data); if p^.Next = nil then writeln('last address: ',a^); p := p^.next; end; writeln('len: ',len); end; var P1:PNode; begin CreateStack(P1); //для решнеия необходимо реализовать только функцию ViewStack(...) ViewStack(P1); end. |
Другие задачи из раздела Pointer можно посмотреть здесь.
Решение, проверенное в электронном задачнике (PT4):