На этом шаге мы рассмотрим другой способ поиска звена в списке.
Рассмотрим алгоритм поиска элемента, начиная с конца списка.
Рабочий указатель устанавливается на последнее звено двунаправленного списка. Анализ содержимого информационных полей происходит таким же образом, как и в функции PoiskForward(), только рабочий указатель q теперь перемещается в "обратном" направлении с помощью оператора q = (*q).pred;.
Оформим алгоритм в виде функции:
node *PoiskBack (int el,node **nsp,node **ksp) // Функция возвращает указатель на найденное звено, // содержащее элемент el двунаправленного списка, // заданного указателями *nsp и *ksp, или NULL, если // звено в списке не найдено. { node *q; node *Res; Res = NULL; q = *ksp; while (q!=NULL && Res==NULL) { if ((*q).elem==el) Res = q; else q = (*q).pred;} return Res; }
Со следующего шага мы начнем знакомиться со способами вставки звена в линейный двунаправленный список.