这段代码应该构建一个包含0到20之间整数的简单链接列表。当我为程序中的每个节点实例编译代码时,我不断收到错误:unknown type name 'node'
。我不确定是否必须定义它们,否则代码中存在更大的缺陷。
#include<stdio.h>
#include<stdlib.h>
int main() {
int i;
struct node *first=NULL;
for(i=1;i<=20;i++)
first=insertrear(first,i);
dispnodes(first);
sum(first);
return 0;
}
typedef struct node {
int data;
struct node *link;
};
node* getnode(node *temp,int i) {
temp=(node*)malloc(sizeof(node));
temp->data=i;
temp->link=NULL;
return temp;
}
node* insertrear(node *first,int a) {
node *temp=NULL,*i;
temp= getnode(temp,a);
if(first==NULL) {
first=temp;
return first;
}
for(i=first;i->link!=NULL;i=i->link);
i->link=temp;
return first;
}
void dispnodes(node *first) {
int j;
if(first==NULL) {
printf("\nlist empty");
return;
}
node *i;
for(i=first,j=0;i!=NULL;j++,i=i->link)
printf("\nNode #%d contains %d ",j,i->data);
}
void sum(node *first) {
node *i;
int total=0;
for(i=first;i!=NULL;i=i->link)
total+=i->data;
printf("\nThe sum total of all nodes in this list is %d",total);
}
答案 0 :(得分:1)
您需要为typedef结构节点指定标签,或者不要键入结构节点。
您使用它的方式,您可以执行以下操作。
/* Forward declare typedef _node to node */
typedef struct node_ node;
/* Define struct node_ */
struct node_ {
int data;
node *link;
};
你应该在main()
之上加上前瞻性声明,以便你也可以在那里使用它。
答案 1 :(得分:0)
typedef struct node {
int data;
struct node *link;
}node;
int main() {
int i;
struct node *first=NULL;
for(i=1;i<=20;i++)
first=insertrear(first,i);
dispnodes(first);
sum(first);
return 0;
}
答案 2 :(得分:0)
您需要修改两件事:
你必须在struct
函数之前声明typedef
,main
和你正在调用的所有函数。编译器在遇到任何声明之前都应该提供声明它们。
您还没有为typedef
node
提供标签,您可以这样做:
typedef struct node {
int data;
struct node *link;
} Node ;
或使用struct node
代替node
来声明变量struct node
类型
以下是修改后的代码:
typedef struct node
{
int data;
struct node *link;
} Node ;
void dispnodes(Node *first);
node* insertrear(Node *first,int a);
void sum(Node *first);
int main() {
int i;
struct node *first=NULL;
for(i=1;i<=20;i++)
first=insertrear(first,i);
dispnodes(first);
sum(first);
return 0;
}
// rest of the code