c - 如何制作高效的循环链表?
问题描述
我正在研究循环链表。下面是我的代码。
typedef struct circle {
int data;
struct circle* next;
} Node;
typedef struct circle {
int number;
Node *Header;
} Circular_List;
void add(Circular_List* circle, int number, int data) {
if (number <0 && number > circle->number)
{
printf("number is wrong. \n");
}
else
{
if (number == 0 && circle->number != 0)
{
Node* pre = (Node*)malloc(sizeof(Node));
Node* add_data = (Node*)malloc(sizeof(Node));
Node* tempt = (Node*)malloc(sizeof(Node));
pre = circle->Header;
while (pre->next != circle->Header )
{
pre = pre->next;
}
circle->number++;
tempt = circle->Header;
circle->Header = add_data;
pre->next = add_data;
add_data->next = tempt;
add_data->data = data;
}
else if (number == 0 && circle->number == 0)
{
Node* add_data = (Node*)malloc(sizeof(Node));
circle->Header = add_data;
add_data->data = data;
add_data->next = add_data;
circle->number++;
}
else
{
Node* pre = (Node*)malloc(sizeof(Node));
Node* add_data = (Node*)malloc(sizeof(Node));
pre = circle->Header;
for (int i = 0; i < number; i++)
{
pre = pre->next;
}
add_data->data = data;
add_data->next = pre->next;
pre->next = add_data;
circle->number++;
}
}
}
它运行良好。但我认为我的代码效率不高。
因为当我只添加一个新节点时,我分配了 3 个节点内存并且不释放任何一个。
这似乎是浪费内存。
如何调整我的代码?或者
制作循环链表是正确的方法吗?
解决方案
推荐阅读
- laravel - Laravel 测试身份验证。使用 Illuminate\Database\Eloquent\ModelNotFoundException 的后续登录尝试失败
- mysql - How to query mysql from google cloud sql instance in React
- mysql - 从字符串 ZXXXXXXXXX 中查找电话号码 +Z XXX-XXX-XXX
- python - 将不存在的文件夹添加到 sys.path 时会发生什么?
- python - 为什么在导入多处理时使用 time.sleep 时字符串打印 3 次而不是 1 次?
- python - 如何在将模型保存到数据库之前在 Django 中发送 OTP
- google-cloud-bigtable - 如何从 Cloud Bigtable cbt 工具获取密钥列表?
- powerapps-modeldriven - 根据模型驱动的 Power App 中文档的保存状态隐藏/显示文件上传部分
- mysql - MySQL 行排序没有意义
- c++ - 什么是 C++ 中的黑名单?