为什么在使用出队时返回队列?

时间:2018-10-18 01:50:20

标签: c

我对队列有些困惑。如下面的代码所示,当我将指针返回到队列的开头时,请使用

Q = enQ(Q)

该功能运行正常。但是,我不明白为什么函数需要返回任何内容,因为队列的指针正在其中更新。当使函数返回void时,为什么以下内容似乎不起作用?

enQ(Q)

代码:

// Adds item to queue
struct node* enQ(struct node* Q, int n){

    struct node* last = Q;
    struct node* new = malloc(sizeof(struct node));
    new->data = n;
    new->next = NULL;

    if (!Q){
        Q = new;
    } else {
        while (last->next){
            last = last->next;
        }
        last->next = new;
    }
    return Q;
}

2 个答案:

答案 0 :(得分:1)

第一次调用enQ()时,它带有一个空指针,指示应创建一个新队列。 enQ()创建一个新节点并返回一个指向它的指针。

在随后的调用中,您不需要返回值是正确的,因为它只返回返回的相同Q,但是第一次确实需要返回值。没有它,调用enQ(NULL, i)将无法将新队列返回给调用者。

答案 1 :(得分:0)

您不使用传递节点输入enQ,您应该创建一个Queue结构并传递Queue *

typedef struct Queue {
    struct node* head;
} Queue;

// Adds item to queue
void enQ(struct Queue* Q, int n) {
    struct node* tail;

    struct node* new = malloc(sizeof(struct node));
    new->data = n;
    new->next = NULL;

    if (Q->head == NULL) {
        Q->head = new;
    } else {
        tail = Q->head;
        while (tail->next) {
            tail = tail->next;
        }

        tail->next = new;
    }
}

void deQ(struct Queue* Q, int n) {
    if (Q->head == NULL) {
        return;
    }

    struct node* temp = Q->head;
    Q->head = Q->head->next;
    free(temp);
}