Удаление элемента из очереди

Функция удаления элемента из очереди аналогична функции удаления из стека:

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 – Удаление элемента из середины очереди


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: