На этом шаге мы рассмотрим алгоритм формирования списка.
Приступим к построению алгоритма формирования двунаправленного списка с заглавным звеном. Опишем необходимые переменные:
node *nsp; // Указатель на заглавное звено списка. node *ksp; // Указатель на последнее звено списка. node *rsp; // Рабочий указатель для перемещения по списку.
nsp = new(node); rsp = nsp; (*nsp).pred = NULL; (*nsp).sled = NULL;
Рис.1. Заглавное звено
cin>>el;
(*rsp).sled = new(node);
Рис.2. Элемент списка
(*((*rsp).sled)).pred = rsp;
rsp = (*rsp).sled;
(*rsp).sled = NULL;
(*rsp).elem = el;
Рис.3. Заполнили поля элемента списка
ksp = rsp;
Рис.4. "Настроили" указатель
Построен двунаправленный список с заглавным звеном, содержащий одно звено. Мы предоставляем возможность читателю проделать самостоятельно несколько последующих шагов алгоритма.
Запишем функцию построения двунаправленного списка с заглавным звеном:
void Postroenie (node **nsp, node **ksp) // Построение двунаправленного списка с заглавным звеном: // *nsp - указатель на начало списка, // *ksp - указатель на конец списка. { node *rsp; int el; *nsp = new(node); rsp = *nsp; (**nsp).pred = (**nsp).sled = NULL; cout<<"Вводите последовательность:\n"; cin>>el; while (el!=0) { (*rsp).sled = new(node); (*((*rsp).sled)).pred = rsp; rsp = (*rsp).sled; (*rsp).sled = NULL; (*rsp).elem = el; cin>>el; } *ksp = rsp; }
Со следующего шага мы начнем рассматривать алгоритмы обхода двунаправленного списка.