Алгоритм удаления звена из очереди
Пусть очередь не пуста (no! =NULL). Изобразим ее схематически: Рисунок 13 - Очередь Приступим к удалению звена. Напомним, что звено удаляется из очереди из ее начала. 1. Сохраним удаляемый элемент: klad = (*no).elem; //первый элемент очереди // сохранен в переменной klad Рисунок 14 - Сохранение удаляемого элемента 2. Сохраним указатель на удаляемый элемент и " перенастроим" указатель на начало очереди: q = no; // сохранение указателя на удаляемый элемент no = (*no).sled; // присваивание указателя начала // очереди следующему элементу Рисунок 15 –«Перенастройка» указателя на начало очереди 3. Теперь необходимо включить в список свободной памяти удаленное из очереди звено с помощью вызова функции: delete q; //удаление звена очереди Рисунок 16 - Возврат памяти Запишем приведенную схему в виде функции на языке C++: void YDALENIE (node *no, node *ko, int klad) // Удаление звена из очереди, определенной указателями //*no и *ko. Значение информационного поля //удаленного звена // сохраняется в параметре klad. {// открытие тела функции YDALENIE node *q; // указатель на удаляемое звено
if (*no==NULL)// если очередь пуста cout< < " Удалить нельзя, так как очередь пуста! \n"; // вывод текста на дисплей else // иначе { // открытие else *klad = (*no).elem; //сохранение первого элемента в klad q = *no; // сохранение указателя на удаляемый элемент //в q *no = (*no).sled; // присваивание указателя начала // очереди следующему элементу deleteq; // удаление первого звена } // закрытие else }// закрытие тела функции YDALENIE
|