双向循环链表
双向循环链表
以下是一个使用C语言实现的双向链表操作函数,包括创建节点、创建链表、销毁链表、打印链表、插入节点、删除节点等功能。这些函数可以用于实现各种链表操作,例如排序、查等。1.链表节点的定义代码语言:javascript代码运行次数:0运行复制typedef int LTDataType;
typedef struct Listode
{
LTDataType data;
struc
双向循环链表
以下是一个使用C语言实现的双向链表操作函数,包括创建节点、创建链表、销毁链表、打印链表、插入节点、删除节点等功能。这些函数可以用于实现各种链表操作,例如排序、查等。
typedef int LTDataType;
typedef struct Listode
{
LTDataType data;
struct Listode* next;
struct Listode* prev;
}Listode;
// 创造一个新的节点
Listode* Buyewnode(LTDataType x)
{
// 分配内存给新节点
Listode* newnode = (Listode*)malloc(sizeof(Listode));
// 检查内存分配是否成功
if (newnode == ULL)
{
perror("malloc");
}
// 初始化新节点的prev, next, 和data属性
newnode->prev = ULL;
newnode->next = ULL;
newnode->data = x;
// 返回新节点
return newnode;
}
// 创建返回链表的头结点.
Listode* ListCreate()
{
// 分配内存给头结点
Listode* head = (Listode*)malloc(sizeof(struct Listode));
// 检查内存分配是否成功
if (head == ULL)
{
perror("malloc");
}
// 初始化头结点的prev和next属性,使之指向自身
head->prev = head;
head->next = head;
// 返回头结点
return head;
}
// 双向链表销毁
void ListDestory(Listode* plist)
{
// 从头开始释放每个节点的内存
Listode* cur = plist;
Listode* next = cur->next;
while (cur)
{
free(cur);
cur = next;
next = cur->next;
}
}
// 双向链表打印
void ListPrint(Listode* plist)
{
// 从第一个节点开始,打印每一个节点的数据
Listode* cur = plist->next;
printf("head<=>");
while (cur != plist)
{
printf("%d<=>", cur->data);
cur = cur->next;
}
printf("\n");
}
void ListPushBack(Listode* plist, LTDataType x)
{
// 创建新节点
Listode* newnode = Buyewnode(x);
// 获取尾节点
Listode* tail = plist->prev;
// 更新链表指针
plist->prev = newnode;
tail->next = newnode;
newnode->prev = tail;
newnode->next = plist;
}
void ListPopBack(Listode* plist)
{
// 获取尾节点和尾节点的前一个节点
Listode* tail = plist->prev;
Listode* prev = tail->prev;
// 更新链表指针,删除尾节点
plist->prev = prev;
prev->next = plist;
free(tail);
}
void ListPushFront(Listode* plist, LTDataType x)
{
// 创建新节点
Listode* newnode = Buyewnode(x);
// 获取第一个节点
Listode* first = plist->next;
// 更新链表指针
plist->next = newnode;
first->prev = newnode;
newnode->prev = plist;
newnode->next = first;
}
// 双向链表头删
void ListPopFront(Listode* plist)
{
// 获取第一个节点和第二个节点
Listode* first = plist->next;
Listode* next = first->next;
// 更新链表指针,删除第一个节点
plist->next = next;
next->prev = plist;
free(first);
}
Listode* ListFind(Listode* plist, LTDataType x)
{
Listode* cur = plist->next;
while (cur != plist)
{
if (cur->data == x)
{
return cur;
}
cur = cur->next;
}
printf("没到");
}
void ListInsert(Listode* pos, LTDataType x)
{
// 获取插入位置的前一个节点
Listode* prev = pos->prev;
// 创建新节点
Listode* newnode = Buyewnode(x);
// 更新链表指针,进行插入操作
prev->next = newnode;
pos->prev = newnode;
newnode->next = pos;
newnode->prev = prev;
}
void ListErase(Listode* pos)
{
// 获取删除位置的前一个节点和后一个节点
Listode* prev = pos->prev;
Listode* next = pos->next;
// 更新链表指针,删除节点
prev->next = next;
next->prev = prev;
free(pos);
pos = ULL;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2024-12-16,如有侵权请联系 cloudcommunity@tencent 删除内存指针plist函数链表 #感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上传时间: 2025-07-28 09:28:12
推荐阅读
留言与评论(共有 17 条评论) |
本站网友 泥鳅的营养价值和功效 | 25分钟前 发表 |
使之指向自身 head->prev = head; head->next = head; // 返回头结点 return head; } 4.双向链表的销毁代码语言:javascript代码运行次数:0运行复制// 双向链表销毁 void ListDestory(Listode* plist) { // 从头开始释放每个节点的内存 Listode* cur = plist; Listode* next = cur->next; while (cur) { free(cur); cur = next; next = cur->next; } }5双向链表打印代码语言:javascript代码运行次数:0运行复制// 双向链表打印 void ListPrint(Listode* plist) { // 从第一个节点开始 | |
本站网友 北京安贞医院挂号 | 29分钟前 发表 |
cur->data); cur = cur->next; } printf("\n"); }6.双向链表尾插代码语言:javascript代码运行次数:0运行复制void ListPushBack(Listode* plist | |
本站网友 系统错误 | 22分钟前 发表 |
打印每一个节点的数据 Listode* cur = plist->next; printf("head<=>"); while (cur != plist) { printf("%d<=>" | |
本站网友 体验服务器 | 26分钟前 发表 |
cur->data); cur = cur->next; } printf("\n"); }6.双向链表尾插代码语言:javascript代码运行次数:0运行复制void ListPushBack(Listode* plist | |
本站网友 北京婚庆公司前十名 | 11分钟前 发表 |
双向链表头删代码语言:javascript代码运行次数:0运行复制// 双向链表头删 void ListPopFront(Listode* plist) { // 获取第一个节点和第二个节点 Listode* first = plist->next; Listode* next = first->next; // 更新链表指针 | |
本站网友 500克是多少斤 | 24分钟前 发表 |
使之指向自身 head->prev = head; head->next = head; // 返回头结点 return head; } 4.双向链表的销毁代码语言:javascript代码运行次数:0运行复制// 双向链表销毁 void ListDestory(Listode* plist) { // 从头开始释放每个节点的内存 Listode* cur = plist; Listode* next = cur->next; while (cur) { free(cur); cur = next; next = cur->next; } }5双向链表打印代码语言:javascript代码运行次数:0运行复制// 双向链表打印 void ListPrint(Listode* plist) { // 从第一个节点开始 | |
本站网友 成视新闻 | 0秒前 发表 |
查等 | |
本站网友 肺癌脑转移 | 15分钟前 发表 |
查等 | |
本站网友 孕妇四个月食谱大全 | 3分钟前 发表 |
LTDataType x) { Listode* cur = plist->next; while (cur != plist) { if (cur->data == x) { return cur; } cur = cur->next; } printf("没到"); }11.双向链表在pos的前面进行插入代码语言:javascript代码运行次数:0运行复制void ListInsert(Listode* pos | |
本站网友 沈佳仪 | 11分钟前 发表 |
删除节点 prev->next = next; next->prev = prev; free(pos); pos = ULL; }本文参与 腾讯云自媒体同步曝光计划 | |
本站网友 广东省天然气管网 | 24分钟前 发表 |
删除节点等功能 | |
本站网友 销售流程 | 0秒前 发表 |
进行插入操作 prev->next = newnode; pos->prev = newnode; newnode->next = pos; newnode->prev = prev; }12.双向链表删除pos位置的结点代码语言:javascript代码运行次数:0运行复制void ListErase(Listode* pos) { // 获取删除位置的前一个节点和后一个节点 Listode* prev = pos->prev; Listode* next = pos->next; // 更新链表指针 | |
本站网友 云南医药健康职业学院 | 10分钟前 发表 |
next | |
本站网友 无锡有哪些职业学校 | 10分钟前 发表 |
打印每一个节点的数据 Listode* cur = plist->next; printf("head<=>"); while (cur != plist) { printf("%d<=>" | |
本站网友 股市大亨 | 18分钟前 发表 |
LTDataType x) { // 创建新节点 Listode* newnode = Buyewnode(x); // 获取尾节点 Listode* tail = plist->prev; // 更新链表指针 plist->prev = newnode; tail->next = newnode; newnode->prev = tail; newnode->next = plist; }7.双向链表尾删代码语言:javascript代码运行次数:0运行复制void ListPopBack(Listode* plist) { // 获取尾节点和尾节点的前一个节点 Listode* tail = plist->prev; Listode* prev = tail->prev; // 更新链表指针 | |
本站网友 重庆餐饮网 | 9分钟前 发表 |
1.链表节点的定义代码语言:javascript代码运行次数:0运行复制typedef int LTDataType; typedef struct Listode { LTDataType data; struct Listode* next; struct Listode* prev; }Listode;2.创造一个新的节点代码语言:javascript代码运行次数:0运行复制// 创造一个新的节点 Listode* Buyewnode(LTDataType x) { // 分配内存给新节点 Listode* newnode = (Listode*)malloc(sizeof(Listode)); // 检查内存分配是否成功 if (newnode == ULL) { perror("malloc"); } // 初始化新节点的prev |