1. Захватываем память под элемент: Spis2 *t = new Spis2;
2. Формируем информационную часть (t -> info = StrToInt(Edit1->Text));
3. Формируем адресные части: t -> next = t -> prev = NULL;
4. Устанавливаем указатели начала и конца списка на первый элемент:
begin = end = t;
Добавление элемента
Добавить в список новый элемент можно как в начало, так и в конец. Захват памяти и формирование информационной части выполняются аналогично предыдущему алгоритму (п.п. 1-2).
Если элемент добавляется в начало списка, то выполняется следующая последовательность действий:
t -> prev = NULL; // Предыдущего нет
t -> next = begin; // Связываем новый элемент с первым
begin -> prev = t; // Изменяем адрес prev бывшего первого
begin = t; // Переставляем указатель begin на новый
В конец элемент добавляется следующим образом:
t -> next = NULL; // Следующего нет
t -> prev = end; // Связываем новый с последним
end -> next = t; // Изменяем адрес next бывшего последнего
end = t; // Изменяем указатель end
Просмотр списка
Просмотр списка можно выполнять с начала, или с конца списка. Просмотр с начала выполняется так же, как для однонаправленного списка (в функции View () лаб.раб. 3 необходимо изменить структурный тип).
Просмотр списка с конца
1. Устанавливаем текущий указатель на конец списка: t = end;
2. Начало цикла, работающего до тех пор, пока t!= NULL.
3. Информационную часть текущего элемента t -> info выводим на экран.
4. Переставляем текущий указатель на предыдущий элемент, адрес которого находится в поле prev текущего элемента: t = t -> prev;
5. Конец цикла.