数据结构--循环链表

一.循环链表的设计

1.循环链表的结构设计:

typedef struct CNode{
int data;
struct CNode* next;
}CNode ,*CList;

2.循环链表的示意图:
3.循环链表和单链表的区别:

唯一区别,没有空指针,尾节点的后继为头,为循环之意.

二.循环链表的实现

cpp 复制代码
//初始化
	free(q);

	return true;
}

//返回key的前驱地址,如果不存在返回NULL;
CNode* GetPrio(CList plist, int key)
{
	CNode* p;
	for (p = plist; p->next != plist; p = p->next)
	{
		if (p->next ->data == key)
		{

			return p;
		}
	}
	return NULL;

}

//返回key的后继地址,如果不存在返回NULL;
CNode* GetNext(CList plist, int key)
{
	CNode* p = Search(plist, key);
	if (p == NULL)
		return NULL;
	return p->next;
}

//输出
void Show(CList plist)
{
	for (CNode* p = plist->next; p != plist; p = p->next)
	{
		printf("%d  ", p->data);
	}
	printf("\n");
}

//清空数据
void Clear(CList plist)
{
	Destroy(plist);
}

//销毁整个内存
void Destroy(CList plist)
{
	//总是删除第一个数据节点
	CNode* p;
	while (plist->next != plist)
	{
		p = plist->next;
		plist->next = p->next;
		free(p);
	}
}

三.循环链表的总结

循环链表其实和单链表是一样的操作,只是在处理的时候处理好尾节点即可,切记,遍历循环链表中不可出现NULL,若遍历的时候出现NULL就错了.

相关推荐
好易学·数据结构9 小时前
可视化图解算法56:岛屿数量
数据结构·算法·leetcode·力扣·回溯·牛客网
Ashlee_code15 小时前
裂变时刻:全球关税重构下的券商交易系统跃迁路线图(2025-2027)
java·大数据·数据结构·python·云原生·区块链·perl
闻缺陷则喜何志丹15 小时前
【带权的并集查找】 P9235 [蓝桥杯 2023 省 A] 网络稳定性|省选-
数据结构·c++·蓝桥杯·洛谷·并集查找
jie*15 小时前
python(one day)——春水碧于天,画船听雨眠。
开发语言·数据结构·python·算法·线性回归
草莓熊Lotso17 小时前
【LeetCode刷题指南】--数组串联,合并两个有序数组,删除有序数组中的重复项
c语言·数据结构·其他·刷题
weixin_4196583117 小时前
数据结构之B-树
java·数据结构·b树
H_HX_xL_L17 小时前
数据结构的算法分析与线性表<1>
数据结构·算法
overFitBrain17 小时前
数据结构-2(链表)
数据结构
xienda17 小时前
数据结构排序算法总结(C语言实现)
数据结构·算法·排序算法
科大饭桶17 小时前
数据结构自学Day8: 堆的排序以及TopK问题
数据结构·c++·算法·leetcode·二叉树·c