Шаг 24.
Формирование линейного двунаправленного списка

    На этом шаге мы рассмотрим алгоритм формирования списка.

    Приступим к построению алгоритма формирования двунаправленного списка с заглавным звеном. Опишем необходимые переменные:

    node *nsp; // Указатель на заглавное звено списка.
    node *ksp; // Указатель на последнее звено списка.
    node *rsp; // Рабочий указатель для перемещения по списку. 
  1. Построим заглавное звено:
        nsp = new(node);
        rsp = nsp;
        (*nsp).pred = NULL;
        (*nsp).sled = NULL;
    


    Рис.1. Заглавное звено

  2. Создаем элемент списка:
        cin>>el;
        (*rsp).sled = new(node);
    


    Рис.2. Элемент списка

  3. Заполняем поля элемента:
        (*((*rsp).sled)).pred = rsp;
        rsp = (*rsp).sled;
        (*rsp).sled = NULL; 
        (*rsp).elem = el; 
    


    Рис.3. Заполнили поля элемента списка

  4. "Настраиваем" указатель на последний элемент списка:
        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;
}

    Со следующего шага мы начнем рассматривать алгоритмы обхода двунаправленного списка.




Предыдущий шаг Содержание Следующий шаг