C-创建节点线性链接列表



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

看起来很简单,但是即使代码看起来不错,也不会编译。

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

#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 tw o在不同范围或使用不同标签声明不同类型的结构,联合或枚举类型的声明。不包括标签的结构,联合或枚举类型的每种声明

在此声明中

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

Main

中的此语句
node_linear_linked_list *manager =
(node_linear_linked_list *)malloc(sizeof(node_linear_linked_list));

导致内存泄漏,因为在以下语句中

init_node_linear_linked_list(&manager);

指针被重新分配。

我也建议您是否通过指针传递,因为参数等于NULL

最新更新