На этом шаге мы рассмотрим как вставить новый элемент в список перед ключом..
Пусть pCKey определяет ссылку на компоненту с заданным ключом Key. Возможны два случая вставки нового элемента в список: вставка перед ключом Key и за ключом Key.
Рассмотрим первый случай: вставка элемента с информационным полем Elem перед указателем pCKey. Изобразим схематично процесс вставки новой компоненты в список перед ключом Key:
Рис.1. Вставка в список новой компоненты перед ключом Key
Рассмотрим алгоритм с помощью диаграмм "до и после" Д. Кнута:
1 шаг. В динамической области памяти резервируем место для динамического объекта:
New(pNew);
Рис.2. Определение места для объекта pNew
2 шаг. В информационное поле нового объекта pNew помещаем значение информационного поля элемента, на который указывает pCKey.
В поле ссылки на следующий элемент указателя pNew помещаем адрес элемента, следующего за компонентом, на которое указывает pCKey:
pNew^.Element := pCKey^.Element; pNew^.pNext := pCKey^.pNext;
Рис.3.
3 шаг. В информационное поле элемента, на который указывает pCKey, помещаем новое значение.
В поле ссылки на следующий элемент указателя pCKey помещаем адрес элемента, на который указывает pNew:
pCKey^.Element := Elem; pCKey^.pNext := pNew;
Рис.4.
Вставка новой компоненты выполняется следующими операторами:
Procedure Insert_Element1(Elem : Integer; pCKey : PrtRec); var pNew : PtrRec; Begin New(pNew); pNew^.Element := pCKey^.Element; {эти две строки можно} pNew^.pNext := pCKey^.pNext; {заменить pNew^ := pCKey^;} pCKey^.Element := Elem; pCKey^.pNext := pNew; End;
На следующем шаге мы рассмотрим как вставить новый элемент в список за ключом.