Pointer74. Даны указатели $$P_1$$ и $$P_2$$ на барьерный и текущий элементы двусвязного списка (о списке с барьерным элементом см. задание Pointer70). Также дано число $$N$$ $$(>0)$$ и набор из $$N$$ чисел. Описать тип TListB — запись с полями Barrier и Current типа PNode (поля указывают соответственно на барьерный и текущий элементы списка) — и процедуру LBInsertLast($$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 |
program Pointer74; 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 LBInsertLast(var L:TListB; D:integer); var temp:PNode; begin new(temp); temp.Data:=D; temp.Next:=L.Barrier; temp.Prev:=L.Barrier.Prev; L.Barrier.Prev.Next:=temp; L.Barrier.Prev:=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); LBInsertLast(L,D); end; a:=Addr(L.Current); Writeln('current: ',a^); end. |
Другие задачи из раздела Pointer можно посмотреть здесь.
Комментарии: