Pointer62. Дан непустой двусвязный список, первый, последний и текущий элементы которого имеют адреса $$P_1$$, $$P_2$$ и $$P_3$$. Также даны пять чисел. Используя тип TList (см. задание Pointer59), описать процедуру InsertAfter($$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 69 70 71 72 73 74 75 76 77 78 79 |
program Pointer62; type PNode=^TNode; TNode=record Data: Integer; Next: PNode; Prev: PNode; end; TList=record First,Last,Current:PNode; end; procedure InsertAfter(var L:TList; D:integer); var temp:PNode; begin new(temp); temp.Data:=D; temp.Prev:=L.Current; if L.Current<>nil then if L.Current.Next<>nil then begin temp.Next:=L.Current.Next; L.Current.Next:=Temp; temp:=temp.Next; Temp.Prev:=L.Current.Next; L.Current:=L.Current.Next; end else begin L.Last:=temp; L.Last.Next:=nil; L.Last.Prev:=L.Current; L.Current.Next:=L.Last; L.Current:=L.Current.Next; end else begin temp.Next:=nil; L.First:=temp; L.Last:=temp; L.Current:=temp; end; 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); InsertAfter(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 можно посмотреть здесь.
Комментарии: