Pointer59. Даны указатели $$P_1$$, $$P_2$$ и $$P_3$$ на первый, последний и текущий элементы двусвязного списка (если список является пустым, то $$P_1=P_2=P_3=nil$$). Также дано число $$N$$ $$(>0)$$ и набор из $$N$$ чисел. Описать тип TList — запись с полями First, Last и Current типа PNode (поля указывают соответственно на первый, последний и текущий элементы списка) — и процедуру InsertLast($$L$$, $$D$$), которая добавляет новый элемент со значением $$D$$ в конец списка $$L$$ ($$L$$ — входной и выходной параметр типа TList, $$D$$ — входной параметр целого типа). Добавленный элемент становится текущим. С помощью этой процедуры добавить в конец исходного списка данный набор чисел (в том же порядке) и вывести новые адреса его первого, последнего и текущего элементов.
Решение:
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 Pointer59; type PNode=^TNode; TNode=record Data: Integer; Next: PNode; Prev: PNode; end; TList=record First,Last,Current:PNode; end; Procedure InsertLast (var L:TList;D:integer); var temp:PNode; begin New(temp); temp.Data:=d; temp.Next:=nil; if L.First<>nil then begin temp.Prev:=L.Last; L.Last.Next:=temp; end else begin temp.Prev:=nil; L.First:=temp; end; L.Last:=temp; L.Current:=temp; end; var P1,P2,P3:PNode; L:TList; a:^Word; N,D,i:integer; begin P1:=nil; P2:=nil; P3:=nil; L.First:=P1; L.Last:=P2; L.Current:=P3; //----------- Write('N: '); Readln(N); for i:=1 to N do begin Write('D: '); Readln(D); InsertLast(L,D); end; a:=Addr(L.First); Writeln('First: ',a^); a:=Addr(L.Last); Writeln('Last: ',a^); a:=Addr(L.Current); Writeln('Current: ',a^); end. |
Другие задачи из раздела Pointer можно посмотреть здесь.
Комментарии: