На этом шаге мы рассмотрим рекурсивное формирование однонаправленного списка с заглавным звеном.
Рассмотрим рекурсивную процедуру формирования однонаправленного списка, содержащую оператор условного перехода, одна ветвь которого выполняет действия, соответствующие обработке пустого списка, а другая ветвь обрабатывает информацию, содержащуюся в одиночном узле. Для обработки оставшейся части списка процедура вызывает сама себя.
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;
На следующем шаге мы рассмотрим просмотр элементов однонаправленного списка с заглавным звеном.