Функция удаления элемента из очереди аналогична функции удаления из стека:
void del (QUEUE **pbeg)
{
QUEUE *old_item = *pbeg;
if(*pbeg)
{
*pbeg =(*pbeg)->next;
free(old_item);
}
}
Пример. Пусть из очереди, состоящей из трех элементов (‘a’,’b’,’c’), необходимо удалить элемент ‘b’. В этом случае необходимо удалить элемент из середины очереди.
Функция удаления элемента из середины очереди:
void del_mid(QUEUE **pbeg) { QUEUE *current = *pbeg; QUEUE *previous = 0; while(current->info!=’b’) { previous = current; current = current->next; } previous->next = current->next; free(current); } | //*pbeg – указатель на первый элемент очереди //текущий элемент очереди //предыдущий элемент очереди //пока поле info текущего элемента не содержит символ ‘b’ //указатель previous указывает на тот же элемент, что и указатель current //перемещение указателя current на следующий по отношению к текущиму элемент //следующим после предыдущего элемента становится следующий по отношению к текущему элемент //уничтожаем элемент current |
На рис. 9 показано происходящее после каждого шага изменения.
Рис. 9 – Удаление элемента из середины очереди