从队列中删除偶数

时间:2015-10-31 10:52:31

标签: c pointers linked-list queue nodes

我试图在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表示它是偶数,然后我将它从队列中出列。

但是,使用这些代码,当我尝试从队列中出列偶数时,它就会停止工作并且不显示任何错误消息。

有谁知道如何解决这个问题?提前谢谢。

2 个答案:

答案 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));
    }
}