void Delete_pol()
{
int kpol; //значение минимального элемента
struct Queue *Ppol; //указатель элемента, предшествующего минимальному
if (L!=NULL) // очередь не пуста
{
kpol=L->Inf; //Принимаем первый элемент за Min
Ppol=L;
Run=L; //Начало просмотра очереди
while (Run->Next!=NULL) //Поиск минимального элемента
{
if ( Run->Next->Inf > 0 )
{
kpol=Run->Next->Inf; //Найден новый Min. Запоминаем его значение
Ppol=Run; //и адрес предшествующего элемента
}
Run=Run->Next; //Перемещение по очереди
}
if (kpol==L->Inf) //Минимум на вершине очереди слева
{ L=L->Next; free(Ppol); }//Удаление левого єлемента
else
{ //Удаление произвольного єлемента(в т.ч. и правого)
if ( Ppol->Next == R )
R=Ppol; //перенос R при удалении последнего элемента
Run=Ppol->Next;
Ppol->Next=Ppol->Next->Next;//Изменение связей элементов в средине очереди
free(Run); //Освобождение памяти
}
}
}
Comments