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