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

相关推荐
yb0os17 分钟前
RPC实战和核心原理学习(一)----基础
java·开发语言·网络·数据结构·学习·计算机·rpc
rit843249916 分钟前
基于灰狼算法(GWO)优化支持向量回归机(SVR)参数C和γ的实现
c语言·算法·回归
蒋士峰DBA修行之路19 分钟前
实验五 静态剪枝
数据库·算法·剪枝
蒋士峰DBA修行之路22 分钟前
实验六 动态剪枝
数据库·算法·剪枝
Tim_101 小时前
【算法专题训练】20、LRU 缓存
c++·算法·缓存
hope_wisdom1 小时前
C/C++数据结构之栈基础
c语言·数据结构·c++··stack
B612 little star king1 小时前
力扣29. 两数相除题解
java·算法·leetcode
野犬寒鸦2 小时前
力扣hot100:环形链表(快慢指针法)(141)
java·数据结构·算法·leetcode·面试·职场和发展
时光追逐者2 小时前
C# 哈希查找算法实操
算法·c#·哈希算法
Jasmine_llq2 小时前
《P3825 [NOI2017] 游戏》
算法·游戏·枚举法·2-sat 算法·tarjan 算法·邻接表存储