3.1 Процедура добавления
Алгоритм добавления элемента в указанное место двунаправленного списка заключается в следующем.
Порождается новое звено и заполняется информационное поле. Полям UpPointer и DownPointer присваивается null. Проверяется, если список пуст то новые становится первым звеном списка. В противном случае новое звено добавляется в список через процедуру вставки.
В ходе процедуры вставки происходит перебор элементов списка до тех пор пока значение поля Subject (название фильма) элемента списка меньше значения поля Subject нового элемента. Далее соответственно произойдет вставка нового звена в начало, в конец, или в середину списка.
При этом в поле DownPointer порожденного звена заносится ссылка на следующий элемент из звена, предшествующего вставляемому.
В поле UpPointer порожденного звена заносится ссылка на предыдущий элемент из звена, следующего за вставляемым.
В поле UpPointer следующего за вставляемым звена заносится ссылка на вставляемое звено.
В поле DownPointer предшествующего звена заносится ссылка на вставляемое звено.
Процедура Add. Добавление элемента в список.
procedure Add(SubjList: PointerSubjs); {процедура добавления элемента в список}
var PSubj, marker: PointerSubjs;
begin
WriteTitle(1,Add film); {выводим заголовок}
new (PSubj); {отводим память под новую динамическую переменную}
WriteForm(1,2,PSubj); {выводим и заполняем форму}
PSubj^.UpPointer := nil;
PSubj^.DownPointer := nil;
if SubjList=nil then SubjList := PSubj {присваиваем значение первому звену}
else
{добавляем элемент через процедуру вставки в список}
begin
marker := SubjList;
while (marker^.Subject<Subj^.Subject)AND(marker^.DownPointer<>nil) do
marker := marker^.DownPointer;
if (marker^.UpPointer=nil) AND (marker^.Subject>Subj^.Subject)
then
begin
Subj^.DownPointer := marker;
marker^.UpPointer := Subj;
SubjList:=Subj;
end
else
if (marker^.DownPointer=nil) AND (marker^.Subject<Subj^.Subject)
then
begin
Subj^.UpPointer := marker;
marker^.DownPointer := Subj;
end
else
{в остальных случаях добавляем элемент в середину списка перед текущим звеном}
begin
Subj^.DownPointer := marker;
Subj^.UpPointer := marker^.UpPointer;
marker^.UpPointer := Subj;
marker := Subj^.UpPointer;
marker^.DownPointer := Subj;
end;
end;
WriteTitle(16, Film was added);
ReadKey;
end;
- Этапы разработки программного обеспечения
- Этапы разработки программного обеспечения.
- Разработка программного обеспечения
- 3.3. Разработка программного обеспечения.
- Разработка программного обеспечения
- Технология разработки программного обеспечения
- Этапы разработки программного обеспечения
- 43. Разработка программного обеспечения