我对队列有些困惑。如下面的代码所示,当我将指针返回到队列的开头时,请使用
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;
}
答案 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);
}