Pointer76. Даны указатели $$P_1$$ и $$P_2$$ на барьерный и текущий элементы двусвязного списка. Также даны пять чисел. Используя тип TListB (см. задание Pointer74), описать процедуру LBInsertBefore($$L$$, $$D$$), которая вставляет новый элемент со значением $$D$$ перед текущим элементом списка $$L$$ ($$L$$ — входной и выходной параметр типа TListB, $$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 |
program Pointer76; type PNode=^TNode; TNode=record Data: Integer; Next: PNode; Prev: PNode; end; TListB=record Barrier,Current:PNode; end; procedure NewListB(var L:TListB); begin new(L.Barrier); L.Barrier.Data:=0; L.Barrier.Next:=L.Barrier; L.Barrier.Prev:=L.Barrier; L.Current:=L.Barrier; end; procedure LBInsertBefore(var L:TListB; D:integer); var temp:PNode; begin new(temp); temp.Data:=D; temp.Next:=L.Current; temp.Prev:=L.Current.Prev; L.Current.Prev.Next:=temp; L.Current.Prev:=temp; L.Current:=temp; end; var P1,P2:PNode; D,i:integer; a:^Word; L:TListB; begin NewListB(L); P1:=L.Barrier; P2:=L.Current; L.Barrier:=P1; L.Current:=P2; for i:=1 to 5 do begin write('D: '); Readln(D); LBInsertBefore(L,D); end; a:=Addr(L.Current); Writeln('current: ',a^); end. |
Другие задачи из раздела Pointer можно посмотреть здесь.
Комментарии: