131
2. Список lst упорядочен по возрастанию. Вставить x, не нарушая
упорядоченность. Используем операции push() для добавления элемента к началу
списка, insafter() — внутрь списка.
q=NULL;
p=lst;
while (p!=NULL) && (x>info(p))
{
q=p;
p=ptrn(p);
}
/*размещаем x*/
if (q==NULL)
push(lst, x); /*поместить в начало списка*/
else
insafter(q,x);
§3.4. Однонаправленные циклические списки
Одним из недостатков линейных списков является то, что имея указатель p
на элемент, мы не можем получить доступа к предшествующим элементам.
Циклический связанный список — это список, в котором последний узел
связан с первым узлом. Чтобы превратить линейный список в циклический
необходимо в поле адреса последнего элемента записать не
NULL, а адрес
первого элемента списка lst (см. рис. 3.4.1).
Рис. 3.4.1. Графическое представление циклического списка
В циклическом списке всегда существует возможность доступа к любому
элементу списка, начиная с произвольно выбранного узла.
Простейшие операции над циклическим списком:
1. Размещение нового узла после элемента с известным адресом p.
2. Удаление узла после элемента с известным адресом p.
В виде циклического стека организуются стеки и очереди.
Недостатки
циклического списка:
1) список нельзя просматривать в обратном направлении;
2) располагая только значением указателя на данный элемент, элемент
невозможно удалить.