A) Проход по списку с проверкой текущего элемента

p:=Head; {Установка текущего указателя на начало списка}

while (p<>nil) and (p^.inf<>A) do

begin

Oper(p); {Какая-либо операция над текущим элементом}

p:=p^.next {Переход к следующему элементу списка}

end;

Данный проход можно использовать:

• Для поиска определенного элемента, тогда в заголовок цикла добавляется соответствующее условие, например, (p^.inf<>A), (p^.inf>0) и т.п. Если элемент найден, p указывает на него. Если не найден, p=nil.

• Для выполнения какой-либо операции над элементами (вывод, суммирование, проверка на максимальность и т.д.). Тогда в тело цикла добавляются операторы или вызов подпрограммы для реализации этой операции.

B) Проход по списку с проверкой наличия элемента, следующего за текущим элементом

p:=Head;

while (p^.next<>nil) do

p:=p^.next;

После выхода из цикла p указывает на последний элемент.

Данный проход можно использовать для вставки элемента в конец списка и перед последним элементом.

C) Проход по списку с двумя указателями

pred:=nil; {pred указывает на предшествующий элемент}

p:=Head; {p – на текущий элемент}

while (p<>nil) and (p^.inf<>A) do

begin

Oper(p);{Какая-либо операция над элементами списка}

pred:=p;

p:=p^.next{Переход к следующему элементу списка}

end;

Данный проход можно использовать:

• Для поиска определенного элемента, тогда в заголовок цикла добавляется соответствующее условие, например, (p^.inf<>A), (p^.inf>0) и т.п.
Если элемент найден, p указывает на него, pred – на предшествующий.
Если не найден, p=nil, pred указывает на последний элемент.

• Для выполнения какой-либо операции над текущим и предшествующими элементами (проверка на возрастание и т.д.). Тогда в тело цикла добавляются операторы или вызов подпрограммы для реализации этой операции.

D) Проход по списку с двумя указателями и с проверкой наличия элемента, следующего за текущим

pred:=nil; {pred указывает на предшествующий элемент}

p:=Head; {p – на текущий элемент}

while (p^.next<>nil)do

begin

pred:=p;

p:=p^.next{Переход к следующему элементу списка}

end;

После выхода из цикла p указывает на последний элемент, pred – на предшествующий элемент.

Данный проход можно использовать для удаления последнего элемента.

Вставка элемента после заданного элемента

Исходный список Список после вставки элемента
A) Проход по списку с проверкой текущего элемента - student2.ru A) Проход по списку с проверкой текущего элемента - student2.ru

Выполнить проход (a) по списку с проверкой текущего элемента для поиска заданного элемента А.

Если элемент найден, выполнить:

new(q);

q^.inf:=x;

q^.next:=p^.next; //Установка ссылки в новом элементе на элемент, который следовал за элементом А

p^.next:=q; //Установка ссылки в элементе А на новый элемент

end;

Наши рекомендации