2014-10-16 35 views
0

我是新來的C. 學習數據stucture我寫的代碼如下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和數據結構。任何人都可以告訴我問題在哪裏?代碼主要是在列表的開頭插入節點。提前致謝。

+0

[在C中,你不應該施放'malloc'的結果。](http://stackoverflow.com/questions/605845/do-i-cast - 結果的malloc) – 2014-10-16 10:17:38

+1

最小的測試用例請;) – 2014-10-16 10:17:43

+0

檢查此問題以瞭解發生了什麼:http://stackoverflow.com/questions/612328/difference-between-struct-and-typedef-struct-in-c – midor 2014-10-16 10:35:09

回答

1

節點在下面的行不作它應該是任何意義上的(結構節點*)

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



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

新手問題大聲笑。謝謝它有幫助! – jwong 2014-10-16 12:48:39

4

Node類型不存在。但是,您有一個類型struct Node,請使用該類型或typedef結構到節點。

+0

非常感謝,現在它可以工作! – jwong 2014-10-16 12:49:21

0

1)的malloc可以返回NULL所以NULL檢查應該在那裏。

if(temp == NULL) return -1; //無法分配內存。這是錯誤條件

2)如果包括stdlib.h中則沒有必要投malloc函數

3)這將是更好的聲明結構像下面的返回值:

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

現在你可以寫「節點」,而不是「結構節點」