ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Добавление компонент в середину спискаСовсем не трудно вставить компоненту (NPoint) в середину списка, когда имеется ссылка на компоненту, предшествующую данной в реорганизованном списке. Назовём её OPoint. NPoint^.next:= OPoint^.next; OPoint^next:= NPoint; Эти операторы будут правильно работать и в том случае, если OPoint – последняя компонента в списке, т.е. OPoint^.next = nil. Если OPoint = nil, то выполнение этих операторов приводит к ошибке. procedure InsertAfter (OPoint, NPoint: link); begin NPoint^.next:= OPoint^.next; OPoint^next:= NPoint end; Труднее организовать процедуру InsertBefore, т.к. тогда новую компоненту надо вставлять перед компонентой, на которую у неё есть ссылка. procedure InsertBefore (OPoint, NPoint: link; var head: link); var cur: link; begin If OPoint = head then begin NPoint^.next:= head; head:= NPoint; end else begin cur:= head; while cur^.next<>OPoint do cur:= cor^.next; cur^.next:= NPoint; NPoint^next:= OPoint end; end; Имеется ещё один способ реализации процедуры InsertBefore. Им пользуются тогда, когда кол-во информации, содержащейся в компонентах списка не очень велико, а список достаточно длинный. Сначала новая компонента с помощью процедуры InsertAfter помещается в список, но попадает не на своё место, а затем меняется местами содержимое компонент. procedure InsertBefore2 (OPoint, NPoint: link); var temp:Point; begin NPoint^.next:=OPoint^.next; OPoint^.next:=NPoint; temp:=OPoint^; OPoint^:=NPoint^; NPoint^:= temp; end;
Не нашли, что искали? Воспользуйтесь поиском:
|