Typedef和节点

时间:2016-04-18 20:50:13

标签: c linked-list nodes

这段代码应该构建一个包含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);
}

3 个答案:

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

您需要修改两件事:

  1. 你必须在struct函数之前声明typedefmain和你正在调用的所有函数。编译器在遇到任何声明之前都应该提供声明它们。

  2. 您还没有为typedef node提供标签,您可以这样做:

    typedef struct node {
        int data;
        struct node *link;
    } Node ;
    

    或使用struct node代替node来声明变量struct node类型

  3. 以下是修改后的代码:

    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