创建节点线性链接列表

时间:2016-11-25 18:19:52

标签: c list pointers compiler-errors singly-linked-list

我正在尝试创建一个线性链表。

看起来非常简单,但即使代码看起来很好,也无法编译。

这是头文件和主文件。你能告诉我这是什么问题吗?

#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();
}

会感激一些帮助。感谢。

1 个答案:

答案 0 :(得分:2)

根据C标准

5对于不同作用域或使用不同标记的结构,联合或枚举类型的声明声明了不同的类型。 不包含标记的结构,联合或枚举类型的每个声明都声明了一个不同的类型

在此声明中

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);
}

有一个错误。我想你的意思是

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