您现在的位置是:首页 > 编程 > 

双向循环链表

2025-07-28 15:10:47
双向循环链表 以下是一个使用C语言实现的双向链表操作函数,包括创建节点、创建链表、销毁链表、打印链表、插入节点、删除节点等功能。这些函数可以用于实现各种链表操作,例如排序、查等。1.链表节点的定义代码语言:javascript代码运行次数:0运行复制typedef int LTDataType; typedef struct Listode { LTDataType data; struc

双向循环链表

以下是一个使用C语言实现的双向链表操作函数,包括创建节点、创建链表、销毁链表、打印链表、插入节点、删除节点等功能。这些函数可以用于实现各种链表操作,例如排序、查等。


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, next, 和data属性
	newnode->prev = ULL;
	newnode->next = ULL;
	newnode->data = x;
	// 返回新节点
	return newnode;
}

.创建一个头结点代码语言:javascript代码运行次数:0运行复制
// 创建返回链表的头结点.
Listode* ListCreate()
{
	// 分配内存给头结点
	Listode* head = (Listode*)malloc(sizeof(struct Listode));
	// 检查内存分配是否成功
	if (head == ULL)
	{
		perror("malloc");
	}
	// 初始化头结点的prev和next属性,使之指向自身
	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)
{
	// 从第一个节点开始,打印每一个节点的数据
	Listode* cur = plist->next;
	printf("head<=>");
	while (cur != plist)
	{
		printf("%d<=>", cur->data);
		cur = cur->next;
	}
	printf("\n");
}

6.双向链表尾插代码语言:javascript代码运行次数:0运行复制
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;
}

7.双向链表尾删代码语言:javascript代码运行次数:0运行复制
void ListPopBack(Listode* plist)
{
	// 获取尾节点和尾节点的前一个节点
	Listode* tail = plist->prev;
	Listode* prev = tail->prev;

	// 更新链表指针,删除尾节点
	plist->prev = prev;
	prev->next = plist;
	free(tail);
}

8.双向链表头插代码语言:javascript代码运行次数:0运行复制
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;
}

9。双向链表头删代码语言:javascript代码运行次数:0运行复制
// 双向链表头删
void ListPopFront(Listode* plist)
{
	// 获取第一个节点和第二个节点
	Listode* first = plist->next;
	Listode* next = first->next;
	// 更新链表指针,删除第一个节点
	plist->next = next;
	next->prev = plist;

	free(first);
}

10.双向链表查代码语言:javascript代码运行次数:0运行复制
Listode* ListFind(Listode* plist, 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, LTDataType x)
{
	// 获取插入位置的前一个节点
	Listode* prev = pos->prev;
	// 创建新节点
	Listode* newnode = Buyewnode(x);

	// 更新链表指针,进行插入操作
	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;

	// 更新链表指针,删除节点
	prev->next = next;
	next->prev = prev;

	free(pos);
	pos = ULL;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2024-12-16,如有侵权请联系 cloudcommunity@tencent 删除内存指针plist函数链表

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1261993.html

相关标签:无
上传时间: 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