Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Полный+текст.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
245.76 Кб
Скачать

2.3.2. Функции исключения элементов .

Алгоритм процедуры delete_first (удаление первого узла списка) строится из трех основных действий: первое- это установка вспомогательного локальною указателя posr на начало списка, второе- это перемещение указателя начала списка *begin на второй узел и третье-удаление первого узла («головы») списка: delete_first(&begin,number); // вызов функции

void delete_first(record **begin, int number)

{ record *posr;

posr=*begin; // первое действие

cout<<"DELETE HEAD";

*begin=posr->next; // второе действие

posr->next=NULL; // обрываем связь между 1-вым и 2-рым узлом по

//указателю "next"

delete posr; // третье действие

(*begin)->prev=NULL; //обрываем связь между 2-рым и l-вым узлом по указателю

//"prev"

number—; }

Алгоритм функции (dе1е1е_after_number(удаление узла после заданного) состоит из четырех основных действий: первое-это перемещение и установка трех вспомогательных локальных указателей pred, temp и posl на узел предшествующий удаляемый и следующий за ним, второе-это установление связей (соединение списка в месте разрыва) по указателям prev и next между узлом предшествующим удаляемому и узлом следующим за ним, третье - обрыв связей удаляемого узла с соседними узлами списка и наконец четвертое - удаление узла.

void delete_after_number(record **begin, int number); // вызов функции

void delete_ after_number(record **cur, int number)

{ record *pred, *posl, *temp;

int i,key;

cout<< "введите номер узла после которого выполняется удаление ";

cin>>key;

cout<<ndl;

pred=: *cur; //устанавливаем указатель pred на начало списка

for(i=l;i<key;i++) // перемещаем указатель pred на узел после которого происходит

//удаление

{if(pred->next->next==NULL) return; //если конец списка pred=pred->next;}

temp=pred->next; // (1) устанавливаем вспомогательный указатель па удаляемый узел posl=pred->next->next; // (2) устанавливаем вспомогательный указатель posl на

// узел следующий за удаляемым

pred->next=posl; // (3) устанавливаем связь по указателю next между узлом

// предшествующим удаляемому и узлом, следующим за ним

posl->prev=pred; // (4) устанавливаем связь по указателю prev между узлом

// следующим за удаляемым и узлом предшествующим ему

temp->next=NULL; // (5) "обрываем " связи удаляемого узла с последующим узлом по

// по указателю next

temp->prev=NULL; // и с предыдущим, по указателю prev

delete temp; //удаляем узел

number—;

}

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

функции.

pred

(1) temp

(2) post

(4)

info

prev

info

prev = NULL

info

prev = pred

info

prev

next = post

(5)

next = NULL

next

(5)

(3)

Р

удаляемый узел

ис.4