|
q^.inf:=a;
q^.next:=p^.next;
p^.next:=q
End
End;
6. Видалення. Для видалення елементу із вказаним інформаційним плем потрібно знову ж як і для вставки перед мати вказівник на попередній елемент, тому операція видалення матиме декілька варіантів: пустий список, видаляється перший елемент, відсутність у списку шуканого елементу, шуканий елемент довільний, крім першого.
writeln('введіть елемент, який потрібно вилучити');
Readln(a);
p:=first;
if p=nil then writeln ('список пустий')
Else
if p^.inf=a then
Begin
first:=p^.next;
Dispose(p)
End
Else
Begin
while (p^.next<>nil) and (p^.next^.inf<>a) do
p:=p^.next;
if p^.next=nil then writeln ('такого елементу немає')
Else
Begin
q:=p^.next;
p^.next:=q^.next;
Dispose(q)
End
End;
Тема: Двонапрямлені лінійні списки.
У двонапрямлених списках і в розглянутих раніше однонапрямлених елементи утворюють лінійну структуру даних з послідовним доступом, але на відміну від них, рух по списку можливий у двох напрямках, тому кожен елемент міститиме, окрім інформаційного поля, два вказівні поля: на наступний і попередній елементи. Список матиме два фіксованих вказівники: на перший – first; на останній – last.
Оскільки рух по списку можливий у двох напрямках, то переміщення від first до last здійснюється через вказівник next; від last до first через вказівник prev, тому формування списку за правилом стеку від first до last – це та ж сама черга від last до first і навпаки.Як і в однонапрямлених списках над двонапрямленими виконують ті ж самі операції.
Оголошення структури списку може мати вигляд:
TYPE
list2=^el_list2;
el_list2=record
inf:integer;
next,prev:list2
END;
ü Формування списку.
writeln('введіть кількість елементів у списку');
Readln(n);
first:=nil;
last:=nil;
for i:=1 to n do
Begin
writeln('введіть елемент');
Readln(a);
New(p);
p^.inf:=a;
if last=nil then last:=p;
p^.next:=first;
first^.prev:=p;
first:=p
End;
2. Перегляд. Здійснюється аналогічно, тільки може здійснюватися в обоз напрямках.
PROCEDURE RESIV;
BEGIN
p:=first;
while p^.next<>nil do
Begin
write(p^.inf,' ');
p:=p^.next
End;
writeln(p^.inf,' ')
END;
Пошук.
p:=first;
writeln('введіть шуканий елемент');
Readln(a);
i:=0;
while (p<>nil) do
Begin
Inc(k);
if p^.inf=a then
Begin
i:=i+1;
writeln('під № ',k)
End;
p:=p^.next
End;
if i=0 then writeln ('немає')
else writeln ('кількість ',i)
3.Вставка перед на відмінну від однонапрямленого списку аналогічна вставці після з точністю переміни вказівників prev і next.
write('введіть елемент, після якого потрібно вставити новий');
Readln(n);
write('введіть новий елемент');
Readln(a);
p:=first;
while p<>nil do
Begin
if p^.inf=n then
Begin
Дата добавления: 2015-09-11; просмотров: 74 | Поможем написать вашу работу | Нарушение авторских прав |