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]

相关推荐
Niuguangshuo3 分钟前
论文解读:CTC,端到端序列识别的开山之作
算法·语音识别
讳疾忌医丶20 分钟前
深度拆解 RocksDB 内核:基于 C++17 的 FIFO 调度状态机与温度阶梯自愈设计
java·c++·算法·架构
M78佐菲33 分钟前
51单片机学习笔记:ds18b20要点整理
linux·笔记·嵌入式硬件·学习·51单片机
高亦真1 小时前
今天是学习嵌入式的第37天
linux·学习·算法
不会就选b2 小时前
数据结构之排序
数据结构
蒸蒸yyyyzwd2 小时前
从面经中学到的三件事
c++·笔记
罗西的思考2 小时前
[Agent Memory / 强化学习] MemPO源码学习笔记 --- (2)--- 训练
人工智能·算法·机器学习
深圳市方中禾科技4 小时前
FZH1625 LCD 驱动芯片深度评测与实战指南
算法·led
我不会起名字3224 小时前
一天一道算法题(34):回溯法的经典例题(子集)
java·数据结构·python·算法·golang·深度优先·力扣
IT小白杨5 小时前
社媒多账号运营的环境隔离:一张图谱模型,解释清“为什么换IP还是被连坐“
经验分享·笔记·矩阵·指纹浏览器