数据结构--循环链表

一.循环链表的设计

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就错了.

相关推荐
梭七y5 小时前
【力扣hot100题】(103)移动零
数据结构·算法·leetcode
H CHY6 小时前
C++代码
c语言·开发语言·数据结构·c++·算法·青少年编程
xiaolang_8616_wjl6 小时前
c++题目_传桶(改编于atcoder(题目:Heavy Buckets))
数据结构·c++·算法
历程里程碑8 小时前
双指针巧解LeetCode接雨水难题
java·开发语言·数据结构·c++·python·flask·排序算法
橘颂TA9 小时前
【剑斩OFFER】算法的暴力美学——链表相加(二)
数据结构·链表·牛客·结构与算法
报错小能手9 小时前
数据结构 可扩展哈希
数据结构·哈希算法·散列表
AI科技星10 小时前
宇宙的像素:真空中一点如何编码无限星光
数据结构·人工智能·算法·机器学习·重构
王璐WL10 小时前
【数据结构】二叉树经典算法题和选择题
数据结构·算法
jllllyuz10 小时前
MATLAB多目标优化:SQP算法实现
数据结构·算法·matlab
im_AMBER10 小时前
数据结构 14 【复习】二叉树中序遍历 | 线索二叉树 | 树、森林、二叉树的转换 | 层次遍历二叉树
数据结构·笔记·学习·算法