C中的数据结构 - 在列表的开头插入节点

时间:2014-10-16 10:15:51

标签: c data-structures

我是C语言学习数据结构的新手。 在关注youtube视频教程时,我按如下方式编写了代码:

#include "stdlib.h"
#include "stdio.h"

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

struct Node* head;

void Insert(int x){
    struct Node* temp = (Node*)malloc(sizeof(struct Node));
    temp->data = x;
    temp->next = head;
    head = temp;
}

void Print(){
    struct Node* temp = head;
    printf("Now the list is: \n");
    while(temp != NULL){
        printf("%d\n", temp->data);
        temp = temp->next;
    }
}

int main(){
    head = NULL;
    printf("How many numbers?\n");
    int n,x,i;
    scanf("%d", &n);
    for(i=0;i<n;i++){
        printf("Enter the number \n");
        scanf("%d", &x);
        Insert(x);
        Print();
    }
}

但它一直在抱怨

aaa.c: In function ‘Insert’:
aaa.c:12:23: error: ‘Node’ undeclared (first use in this function)
  struct Node* temp = (Node*)malloc(sizeof(struct Node));
                       ^
aaa.c:12:23: note: each undeclared identifier is reported only once for each function it appears in
aaa.c:12:28: error: expected expression before ‘)’ token
  struct Node* temp = (Node*)malloc(sizeof(struct Node));

我对C和数据结构都很陌生。谁能告诉我问题出在哪里?代码主要是在列表的开头插入节点。提前谢谢。

3 个答案:

答案 0 :(得分:4)

Node类型不存在。但是,您有一个类型struct Node,使用它或键入一个结构到Node。

答案 1 :(得分:1)

以下行中的节点没有任何意义它应该是(struct Node *)

struct Node* temp = (Node*)malloc(sizeof(struct Node));//Wrong



struct Node* temp = (struct Node*)malloc(sizeof(struct Node));//Right way to use

答案 2 :(得分:0)

1)malloc可以返回NULL,因此应该有NULL检查。

if(temp == NULL) 返回-1; //无法分配内存这是错误条件

2)如果包含stdlib.h则无需转换malloc函数的返回值

3)最好如下所示声明结构:

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

现在你可以编写“Node”而不是“struct Node”