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]]

相关推荐
saoys16 小时前
Opencv 学习笔记:图像掩膜操作(精准提取指定区域像素)
笔记·opencv·学习
MM_MS16 小时前
Halcon变量控制类型、数据类型转换、字符串格式化、元组操作
开发语言·人工智能·深度学习·算法·目标检测·计算机视觉·视觉检测
独自破碎E17 小时前
【二分法】寻找峰值
算法
mit6.82417 小时前
位运算|拆分贪心
算法
电子小白12317 小时前
第13期PCB layout工程师初级培训-1-EDA软件的通用设置
笔记·嵌入式硬件·学习·pcb·layout
ghie909018 小时前
基于MATLAB的TLBO算法优化实现与改进
开发语言·算法·matlab
恋爱绝缘体118 小时前
2020重学C++重构你的C++知识体系
java·开发语言·c++·算法·junit
wuk99818 小时前
VSC优化算法MATLAB实现
开发语言·算法·matlab
Z1Jxxx18 小时前
加密算法加密算法
开发语言·c++·算法
乌萨奇也要立志学C++18 小时前
【洛谷】递归初阶 三道经典递归算法题(汉诺塔 / 占卜 DIY/FBI 树)详解
数据结构·c++·算法