Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методика_списки_1.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
186.37 Кб
Скачать
    1. Включение и исключение элементов из списка .

      1. Процедуры включения элементов .

Содержательной частью процедуры AddtoHead (добавление узла в начало списка) являются операторы создания(открытия) узла и операторы присоединения (привязки) узла к «голове» списка, используя при этом поля указателей prev и next:

procedure AddtoHead;

var newnode:ptrnode;

begin

new(newnode); {открыт (создан) новый узел, выделена память}

write('name '); readln(newnode^.info.name); {заполнение информационных полей}

write('age '); readln(newnode^.info.age); { нового узла}

write('group '); readln(newnode^.info.group);

current:=list0.head; {установка текущего(служебного) указателя на начало списка}

list0.head:=newnode; {установка(перемещение) указателя-признака начала списка

на новый узел, он теперь будет головным}

newnode^.next:=current; {привязка нового узла к началу списка по полю указателя next}

end;

Алгоритм процедуры AddAfterNumber(добавление узла после заданного) также

состоит из двух основных действий: первое-это создание узла, а второе-это его включе-ние(привязка) в заданное место цепочки линейного списка, используя при этом поле указателя next:

procedure AddAfterNumber(number:integer);

var i:integer;

TempPred,TempPosl,newnode:ptrnode;

begin

new(newnode);

write('new name '); readln(newnode^.info.name);

write('new age '); readln(newnode^.info.age);

write('new group '); readln(newnode^.info.group);

current:=list0.head;

i:=1;

while (i<>number) and (current<>nil) do

begin

i:=i+1; current:=current^.next;

end;

{Оператор цикла while do предназначен для перемещения текущего указателя current в заданное место списка, на узел после которого добавляется новый. Цикл работает до тех пор пока номер заданного узла(переменная number) не совпадет со значением счетчика i и до тех пор пока список не кончился(current<>nil)}

{1} TempPosl:=current^.next; { установка служебного указателя на следующий после заданного узел, т.е. на тот перед которым вставляется новый}

{2} TempPred:=current; { установка служебного указателя на следующий после

заданного узел, т.е. на тот перед которым вставляется новый}

{3} TempPred^.next:=newnode; {устанавливаем связь между новым узлом и узлом после

которого он вставляется(связь по полю указателя next слева-направо)}

{5} newnode^.next:=TempPosl; {устанавливаем связь между новым узлом и узлом перед которым он вставляется(связь по полю указателя next слева-направо)}

end;

На рис.3.3 графически интерпретированы действия операторов программы.

{2} {1}

info

info

next

newnode

info

next

next

{3} {5}

Рис.3.3

Рис.3.4