创建节点线性链表

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

希望得到一些帮助。谢谢。

最佳答案

按照C标准

5 结构、 union 或枚举类型的两个声明,它们在不同的范围内或使用不同的标签声明不同的类型。 不包含标记的结构、 union 或枚举类型的每个声明都声明了一个不同的类型

在这个声明中

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

关于创建节点线性链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40810591/

相关文章:

python - 与python列表: are they or are they not iterators?混淆

c++ - 'auto *const' 具有 std::_Array_iterator<char, 48> 类型的不兼容初始值设定项

c++ - 带有指针模板参数的模板类的特化

c++ - 如何从 Linux 上的动态库加载静态函数(在 C 中)

c - 在本地安装 Popt

python - 查找 Python 列表中的显着变化

python - 将 FASTA 文件中的多个序列添加到 python 列表中

c - snprintf 不工作 float

c - 将两个数除以一个整数

c++ - 双链循环表c++