1. Начало цикла.
2. Захват памяти под текущий элемент:
t = (Spis*) malloc(sizeof(Spis));
3. Формирование информационной части:
scanf(“%d”, &t -> info);
4. Формирование адресных частей текущего элемента:
а) указателю на следующий элемент (Next) присваиваем значение NULL, т.к. добавление выполняем в конец, следующего за t нет:
t -> Next = NULL;
б) указателю на предыдущий элемент (Prev), используя указатель конца (end), присваиваем адрес бывшего последнего элемента:
t -> Prev = end;
5. Последним элементом был end, а должен стать t, для этого указатель на следующий элемент последнего в списке (end) устанавливаем на созданный (текущий):
end -> Next = t;
6. Переставляем указатель конца списка на созданный элемент:
end = t;
7. Продолжаем цикл до тех пор, пока не обработаем признак его завершения.
Алгоритм просмотра списка
| С начала
| С конца
|
| 1. Устанавливаем текущий указатель на:
|
| начало списка t = begin;
| конец списка t = end;
|
| 2. Начало цикла, работающего до тех пор, пока t != NULL.
|
| 3. Информационную часть текущего элемента t -> info – на печать.
|
| 4. Устанавливаем текущий указатель на:
|
| следующий элемент, адрес которого находится в поле Next текущего элемента
t = t -> Next;
| предыдущий элемент, адрес которого находится в поле Prev текущего элемента
t = t -> Prev;
|
| 5. Конец цикла.
|
|