数据结构--循环链表(C语言实现)


一.循环链表的设计

cpp 复制代码
typedef struct CNode{	
      int data;	
      struct CNode* next;
}CNode ,*CList;

2.循环链表的示意图:


3.循环链表和单链表的区别:
唯一区别,没有空指针,尾节点的后继为头,为循环之意.


二.循环链表的实现

cpp 复制代码
//初始化
	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就错了.


本篇完!

相关推荐
paeamecium3 分钟前
【PAT甲级真题】- Recover the Smallest Number (30)
数据结构·算法·pat考试·pat
玛丽莲茼蒿10 分钟前
Leetcode hot100 在排序数组中查找元素的第一个和最后一个位置【中等】
数据结构·算法
我不是懒洋洋11 分钟前
手写一个一致性哈希:从原理到分布式缓存实战
c语言
mount_myj15 分钟前
异或树【C语言】
c语言
踩坑记录29 分钟前
leetcode 92. 反转链表 II 区间反转(不是整条链表反转)
leetcode·链表
寒秋花开曾相惜1 小时前
(学习笔记)4.2 逻辑设计和硬件控制语言HCL(4.2.3 字级的组合电路和HCL整数表达式)
android·网络·数据结构·笔记·学习
70asunflower1 小时前
C/C++ 自定义函数的常用规范:从入门到工程实践
c语言·c++
发疯幼稚鬼1 小时前
二叉树的广度优先遍历
c语言·数据结构·算法·宽度优先
love在水一方1 小时前
【Voxel-SLAM】Data Structures / 数据结构文档(二)
数据结构·人工智能·机器学习
Via_Neo1 小时前
乘积最大问题
数据结构·算法