我试图在C编程中从队列中删除偶数时遇到困难。这是代码:
void deleteEven(Queue *que)
{
while (!isEmptyQueue(que)) {
if ((que->list.first->data) % 2 == 0) {
dequeue(que->list.first->data);
}
}
}
int dequeue(Queue *que)
{
int x;
if (que->list.first!= NULL) {
x= ((que->list).first)->data;
remove(&que->list, 0);
que->list.size--;
return x;
}
else return NULL;
}
我要做的是首先,我试图检查队列是否为空。然后我将得到链表头和模数为2,如果得到0表示它是偶数,然后我将它从队列中出列。
但是,使用这些代码,当我尝试从队列中出列偶数时,它就会停止工作并且不显示任何错误消息。
有谁知道如何解决这个问题?提前谢谢。
答案 0 :(得分:0)
根据您编辑的版本以及我对remove()函数和enqueue()函数的想象,我认为您真正需要的就是跟随。
void deleteEven(Queue *que)
{
Queue *odd =(Queue*) malloc(sizeof(Queue));
odd->list.size = 0;
odd->list.first = NULL;
while (!isEmptyQueue(que)) {
if ((que->list.first->data) % 2 != 0) {
enqueue(odd, que->list.first->data);
}
//dequeue(que->list.first->data); wrong
dequeue(que); // passing the queue to dequeue function, not an integer
}
while (!isEmptyQueue(odd)) {
enqueue(que, odd->list.first->data);
dequeue(odd); // simply do dequeue on odd
}
free(odd);
}
因为没有任何错误信息或崩溃发生,我认为这个错误是由于您滥用出列函数而造成的,该函数根本没有出列。
答案 1 :(得分:0)
void deleteEven(Queue *que)
{
Queue newq;
newq.List.first = NULL;
newq.List.size = 0;
while (!isEmptyQueue(que))
{
if ((que->list.first->data) % 2 != 0)
{
enqueue(newq, que->list.first->data);
}
dequeue(que);
}
while (!isEmptyQueue(newq))
{
enqueue(que, dequeue(newq));
}
}