为什么入队的时候要data++?


#include <stdio.h>
#include <stdlib.h>
/*   出队,入队,获取队首元素,判断是否为空,获取长度,遍历,清空*/

typedef struct{

int data;

struct Node* next;

}Node;


Node* init(){

Node* head=(Node*)malloc(sizeof(Node));

head->data=0;

head->next=NULL;

return head;/////////////////!!!

}


int isEmpty(Node* list){

return list->next==NULL;

}//等于NULL 返回1
//不等于NULL 返回0


void inqueue(Node* list,int data){

Node* p=list;

while(p->next){

    p=p->next;
}

Node* node=(Node*)malloc(sizeof(Node));

node->data=data;

node->next=NULL;

p->next=node;


}


int outqueue(Node* list){

Node* p=list->next;

int value=p->data;

list->next=p->next;

free(p);

return value;


}

/*int gettop(Node* list){

return list->next->data;


}
*/

int getlength(Node* list){

int length=0;
Node* p=list;

while(p->next){

    p=p->next;
    length++;

}

return length;

}


void print(Node* list){
Node* p=list;

while(p->next){

    printf("%d",p->data);

    p=p->next;
}


}



void clear(Node* list){
    list->next=NULL;
}



int main()
{
    Node* a=init();

    inqueue(a,1);
    inqueue(a,2);
    inqueue(a,3);

    print(a);

    return 0;
}

【以下回答由 GPT 生成】

在给定的代码中,data++是一个错误。请注意,结构体Node中的data变量是一个整数类型,表示队列中每个节点存储的数据。在入队操作中,应该将新节点的数据赋值给data,而不是增加data的值。

下面是修改后的代码:

#include <stdio.h>
#include <stdlib.h>

typedef struct Node{
    int data;
    struct Node* next;
}Node;

Node* init(){
    Node* head = (Node*)malloc(sizeof(Node));
    head->next = NULL;
    return head;
}

int isEmpty(Node* list){
    return list->next == NULL;
}

void inqueue(Node* list, int data){
    Node* p = list;
    while(p->next){
        p = p->next;
    }
    Node* node = (Node*)malloc(sizeof(Node));
    node->data = data;
    node->next = NULL;
    p->next = node;
}

int outqueue(Node* list){
    Node* p = list->next;
    int value = p->data;
    list->next = p->next;
    free(p);
    return value;
}

int getlength(Node* list){
    int length = 0;
    Node* p = list;
    while(p->next){
        p = p->next;
        length++;
    }
    return length;
}

void print(Node* list){
    Node* p = list->next;
    while(p){
        printf("%d ", p->data);
        p = p->next;
    }
    printf("\n");
}

void clear(Node* list){
    Node* p = list->next;
    while(p){
        Node* temp = p;
        p = p->next;
        free(temp);
    }
    list->next = NULL;
}

int main(){
    Node* a = init();
    inqueue(a, 1);
    inqueue(a, 2);
    inqueue(a, 3);
    print(a);
    clear(a);
    return 0;
}

在修改后的代码中,入队操作将新节点的数据赋值给data,然后将该节点添加到队列中。原始代码中的data++操作是一个错误。

建议运行修改后的代码,您将看到输出结果为1 2 3,表示成功将数据入队到队列中。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

注释内容为什么报错?