Когда очередь пуста, после добавления первого элемента вы должны вернуться из функции enqueue
, без нее вы заставите front
указывать на себя .
Решение:
if(front==NULL)
{ //if queue is empty
tmp->link = front;
front = tmp;
return; // <-- added
}
Без возврата у вас есть проблема, потому что front
указывает на себя:
По этим строкам вы создаете первый элемент:
tmp = new PRecord;
tmp->entry = item;
tmp->time = time;
if(front==NULL){ //if queue is empty
tmp->link = front;
front = tmp;
}
затем вы проверяете следующее условие if(time<=front->time){
, которое возвращает true, очевидно, time
равны, тогда эта строка
tmp->link = front;
указывает, что front
указывает на себя, потому что tmp == front
и front
не равны NULL. Вот почему ваша dequeue
функция не работает.