2016-11-25 130 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