Шаг 7.
Рекурсивное формирование однонаправленного списка с заглавным звеном

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

    Рассмотрим рекурсивную процедуру формирования однонаправленного списка, содержащую оператор условного перехода, одна ветвь которого выполняет действия, соответствующие обработке пустого списка, а другая ветвь обрабатывает информацию, содержащуюся в одиночном узле. Для обработки оставшейся части списка процедура вызывает сама себя.

 Procedure Create_List_Re (var pList : PtrRec);   {Построение списка}
   var El : TypeElement;
 Begin
  Write ('Элемент ');
  ReadLn (El);
  If El <> 0
    Then Begin
     New (pList^.pNext);
     pList^.pNext^.Element := El;
     pList^.pNext^.pNext := Nil;
     Create_List_Re (pList^.pNext);
   End;
 End;

    Изобразим схематично процесс выполнения основных операторов данной рекурсивной процедуры:


Рис.1. Выполнение основных операторов рекурсивной процедуры

 New (List^.pNext);  {определяем место для нового компонента}
 List^.pNext^.Element := El;
 List^.pNext^.pNext := Nil;   {заполняем информационное поле и ссылку нового звена}
 Create_List_Re (List^.pNext);  {процесс формирования списка продолжим дальше}

    В основной программе перед вызовом этой рекурсивной процедуры следует сформировать заглавное звено следующим образом:

 New (pBegin); 
 pBegin^.pNext := Nil;
 WriteLn ('Задайте элементы списка (ввод закончите 0)... ');
 Create_List_Re (pBegin);
 WriteLn;

    На следующем шаге мы рассмотрим просмотр элементов однонаправленного списка с заглавным звеном.




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