2016-11-25 176 views
1

我試圖創建一個線性鏈接列表。創建節點線性鏈接列表

看起來很簡單,但即使代碼看起來不錯,它也不會編譯。

這裏是頭文件和主。你能告訴我問題是什麼嗎?

#include <malloc.h> 
typedef int TYP; 

typedef struct 
{ 
    TYP info; 
    node_linear_linked_list *next; 
} node_linear_linked_list; 

void init_linear_linked_list(node_linear_linked_list **manager) 
{ 
    *manager = NULL; 
} 

void push_linear_linked_list(node_linear_linked_list **manager, TYP info) 
{ 
    node_linear_linked_list *ptr = 
    (node_linear_linked_list *)malloc(sizeof(node_linear_linked_list)); 

    ptr->info = info; 
    ptr->next = *manager; 
    *manager = ptr; 
} 

void insert_after_linear_linked_list(node_linear_linked_list *before, TYP info) 
{ 
    node_linear_linked_list *ptr = 
    (node_linear_linked_list *)malloc(sizeof(node_linear_linked_list)); 

    ptr->info = info; 
    ptr->next = before->next; 
    before->next = ptr; 
} 

void pop_linear_linked_list(node_linear_linked_list **manager) 
{ 
    node_linear_linked_list *temp_ptr = *manager; 
    *manager = temp_ptr->next; 
    free(temp_ptr); 
} 

void delete_after_linear_linked_list(node_linear_linked_list *before) 
{ 
    node_linear_linked_list *temp_ptr = before; 
    before->next = before->next->next; 
    free(temp_ptr); 
} 

這裏的主:

#include <malloc.h> 
#include "node_linear_linked_list.h" 
void main(void) 
{ 
    node_linear_linked_list *manager = 
    (node_linear_linked_list *)malloc(sizeof(node_linear_linked_list)); 

    init_node_linear_linked_list(&manager); 
    getch(); 
} 

希望得到一些幫助。謝謝。

+0

'typedef struct { TYP info; node_linear_linked_list * next;' - >'typedef struct node TYP info; struct node * next;' – BLUEPIXY

+2

@Maya編譯器報告錯誤。閱讀其診斷信息。 –

+1

不要將函數放在頭文件中,這不是如何使用頭文件。 –

回答

2

據結構,聯合或枚舉類型的C標準

5 Tw的ö聲明其是在不同的範圍,或使用不同的標籤聲明截然不同的類型。 不包含標籤的結構,聯合或枚舉類型的每個聲明都會聲明不同的類型

在此聲明

typedef struct 
{ 
    TYP info; 
    node_linear_linked_list *next; 
} node_linear_linked_list; 

有聲明的未命名結構。在此數據成員聲明中

node_linear_linked_list *next; 

名稱node_linear_linked_list未定義。

你必須寫例如

typedef struct node_linear_linked_list 
{ 
    TYP info; 
    struct node_linear_linked_list *next; 
} node_linear_linked_list; 

此功能

void delete_after_linear_linked_list(node_linear_linked_list *before) 
{ 
    node_linear_linked_list *temp_ptr = before; 
    before->next = before->next->next; 
    free(temp_ptr); 
} 

有一個bug。我想你的意思

void delete_after_linear_linked_list(node_linear_linked_list *before) 
{ 
    if (before && before->next) 
    { 
     node_linear_linked_list *temp_ptr = before->next; 
     before->next = before->next->next; 
     free(temp_ptr); 
    } 
} 

在主

本聲明
node_linear_linked_list *manager = 
(node_linear_linked_list *)malloc(sizeof(node_linear_linked_list)); 

導致內存泄漏,因爲在下面的語句

init_node_linear_linked_list(&manager); 

指針被重新分配。

此外,我建議做一個函數檢查,作爲參數傳遞的指針是否等於NULL