02-2.3.4 循环链表

循环单链表

之前学习的单链表,最后一个结点的next指针都是指向NULL

但是循环单链表 的表尾结点的next指针指向头结点

c 复制代码
/*
* 需要注意的是:
* 在我们初始化一个循环单链表的时候,
* 我们需要把头结点的next指针指向头结点它自己;
* 相应的,如果要判断循环单链表是否为空,
* 只需要检查头结点的next指针是否指向它自己就可以了。
*/
typedef struct LNode{
	ElemType data;
	struct LNode *next;
}LNode, *LinkList;

//初始化一个循环单链表
bool InitList(LinkList &L){
	L = (LNode *) malloc (sizeof(LNode));
	if(L == NULL)
		return false;
	L->next = L;
	return true;
}

//判断循环单链表是否为空
bool Empty(LinkList &L){
	if(L->next == L)
		return true;
	else
		return false;
}

//判断结点p是否为循环单链表的表尾结点
bool isTail(LinkList &L, LNode *p){
	if(p->next == L)
		return true;
	else
		return false;
}
  • 普通单链表:从一个结点出发只能找到后续的各个结点
  • 循环单链表:从一个结点出发可以找到其他任何一个结点

特性:

  • 头部 找到尾部 :时间复杂度: O ( n ) O(n) O(n)
  • 尾部 找到头部 :时间复杂度: O ( 1 ) O(1) O(1)
    如果很多时候对链表的操作都是在头部 或者尾部 ,可以让L指向表尾元素(插入、删除时可能需要修改L)

循环双链表

  • 双链表:
    • 表头结点的prior指向NULL
    • 表尾结点的next指向NULL
  • 循环双链表:
    • 表头结点的prior指向表尾结点
    • 表尾结点的next指向头结点

循环双链表的初始化

c 复制代码
//初始化为空的循环双链表
bool InitDLinkList(DLinkList &L){
	L = (DNode *) malloc (sizeof(DNode));
	if(L == NULL)     //内存不足,分配失败
		return false;
	L->prior = L;     //头结点的prior指向头结点
	L->next = L;      //头结点的next指向头结点
}

void testDLinkList(){
	DLinkList L;
	InitDLinkList(L);
	//......
}

//判断循环双链表是否为空
bool Empty(DLinkList L){
	if(L->next == L)
		return true;
	else
		return false;
}

//判断结点p是否为循环双链表的表尾结点
bool isTail(DLinkList L, DNode *p){
	if(p->next == L)
		return true;
	else;
		return false;
}

循环双链表和双链表代码差别

普通双链表代码没有优化前 的插入操作在循环双链表中可以正确运行\[2.3.3 双链表#\^b85fdc]

那么对于双链表的删除也是一样\[2.3.3 双链表#\^29e61b]

相关推荐
战血石LoveYY3 分钟前
Integer类型超限,导致数据异常
java·算法
会周易的程序员4 分钟前
从零构建多核CPU负载自适应控制系统
linux·c++·笔记·物联网·测试工具
紫金修道13 分钟前
PnP算法介绍(Perspective-n-Point)
算法
茯苓gao1 小时前
机器人产业的三级火箭:卖电机、卖模组与卖整机,三种商业模式的终局推演
笔记·学习·机器人
mm9954202 小时前
PMI三大证书:PMP、PgMP、PfMP证书对比
学习·职场和发展·项目管理·学习方法·pmp
froyoisle2 小时前
CSP 真题解析:[CSP-J 2019-T4] 加工零件
c++·算法·bfs·csp-j·算法竞赛·信息学·信奥赛
LuminousCPP2 小时前
C 语言集中实践全记录:顺序表 + 单链表原理实现与通讯录项目实战【附可运行源码】
c语言·开发语言·数据结构·经验分享·笔记
兰令水2 小时前
hot100【acm版】【2026.7.13打卡-java版本】
java·开发语言·数据结构·算法·leetcode·面试
Tisfy2 小时前
LeetCode 1291.顺次数:打表/枚举
算法·leetcode·题解·枚举·遍历
马里马里奥-2 小时前
大模型应用开发笔记04:LangChain 工具(Tool)与中间件(Middleware)详解
笔记·中间件·langchain