Добавление элемента в двунаправленный список до указанного
Type
Двунаправленный список. Кольцо
- Понятие двунаправленного списка, кольца.
Элементы двунаправленного списка описываются аналогично элементам однонаправленного списка, с той лишь разницей, что добавляется описание второго указателя. Один из указателей ссылается на следующий элемент, а другой — на предыдущий элемент списка. Двунаправленный список можно представить в виде перекидного календаря, элементы которого упорядочены:
<имя типа>=^<имя>;
<имя>=record
<имя_информационной_часпш>:<тип_информац._части>;
<имя_указателя_1>,<имя_указателя_2>:<имя_типа>;
епd;
Например, описание двунаправленного списка, у которого в информационной части (inf) каждого элемента содержится символ, указатель на следующий элемент назван sled, а на предыдущий — рrеd:
type kolco=^k;
k=record
inf:char;
sled, pred:kolco;
end;
- Операции над элементами двусвязного списка
Головной элемент head необходим для исключения повторного обхода.
Создание кольцаначинается с создания головного элемента:
new (head);
head^.sled:=head;
head^.pred:=head;
Вставка “после”:
young^.pred:=old;
young^.sled:=old^.sled;
old^.sled^.pred:=young;
old^.sled:=young;
Вставка “до”:
young^.sled:=old;
young^.pred =old^.pred;
old^.pred ^.sled:=young;
old^.pred:=young.
1.Исходное состояние:
2.Выделение памяти под новый элемент: new(p);
3. Занесение информации в новый элемент:
p^.inf:=88;
4.Установка связей между элементами: 4.1. p^.pred:=ukaz^. pred (p^.pred будет указывать на тот элемент, на который указывает ukaz^.pred);
4.2. p^.sled:=ukaz (p^.sled будет указывать на тот элемент, на который указывает ukaz);
4.3. ukaz^.pred^.sled:=p (ukaz^.pred^.sled – это указатель sled элемента, стоящего перед указанным/ будет указывать на тот элемент, на который указывает р);
4.4. ukaz^.pred:=p (ukaz^.pred будет указывать на тот элемент, на который указывает р);