АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция
|
Удаление элемента из очереди
Функция удаления элемента из очереди аналогична функции удаления из стека:
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 – Удаление элемента из середины очереди 1 | 2 | 3 | 4 | 5 | Поиск по сайту:
|