logo
Разработка программного обеспечения видеотеки

3.2 Процедура удаления

программный двунаправленный сортировка алгоритм

Если удаляемый элемент находится в середине списка, тогда выполняется следующий алгоритм.

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

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

Уничтожается удаляемое звено.

Если удаляемый элемент находится в начале списка, тогда в поле DownPointer следующего за удаляемым звена заносится Null и уничтожается удаляемое звено.

Если удаляемый элемент находится в конце списка, тогда в поле UpPointer предшествующего удаляемому звена заносится Null и так же уничтожается удаляемое звено.

Процедура RemoveSubj. удаление элемента из списка.

procedure RemoveSubj(marker:PointerSubjs);

{процедура удаления элемента}

var tmp:PointerSubjs;

begin

if(marker <> NIL) then

begin

{если элемент единственный}

if (marker^.UpPointer = nil) and (marker^.DownPointer = nil) then

begin

SubjList:=nil;

Dispose(marker);

end

else

if (marker^.UpPointer = NIL) then {удаление, если текущее звено первое}

begin

SubjList := marker^.DownPointer;

SubjList^.UpPointer := NIL;

Dispose(marker);

end

else

if (marker^.DownPointer = NIL) then {удаление, если текущее звено последнее}

begin

tmp := marker;

marker := marker^.UpPointer;

marker^.DownPointer := NIL;

Dispose(tmp);

end

else {удаление в остальных случаях, когда звено в середине списка}

begin

tmp := marker;

marker := marker^.UpPointer;

marker^.DownPointer := tmp^.DownPointer;

marker := marker^.DownPointer;

marker^.UpPointer := tmp^.UpPointer;

Dispose(tmp);

end;

end;

end;