数据结构--数据结构中的双链表结构(下)

  • 创建双链表之:尾删,所谓尾删就是删除上一个空间的尾部,:

尾删所对应的List.h,为

cs 复制代码
void LTPushBack(LTNode* phead);

他所对应的List.c,的代码为

cs 复制代码
void LTPushBack(LTNode* phead)

{
	//链表必须有效且链表不能为空
	assert(phead && phead->next != phead);

	LTNode* del = phead->prev;
	del->prev->next = phead;

	phead->prev = del->prev;
	//删除del节点
	free(del);
	del = NULL;
}
  • 有尾删必须有头删,它的原理和尾删其实都是一样的,只不过头删是删掉后一个空间的头部,

头删所对应的List.h,为

cs 复制代码
void LTPushFront(LTNode* phead);

他所对应的List.c,的代码为

cs 复制代码
void LTPushFront(LTNode* phead)
{
	assert(phead && phead->next != phead);

	LTNode* del = phead->next;

	phead->next = del->next;
	del->next->prev = phead;

	//删除del节点

	free(del);
	del = NULL;
}
  • 在pos位置之后插入数据:为什么要在pos之后插入数据呢?这是因为,现实的操作中,不只是头和尾的相关操作,它还有可能是,在某一个中间插入一个数据,这就需要算法来实现的,

在pos位置之后插入数据的List.h的代码:

cs 复制代码
//在pos位置之后插入数据

void LITNEST(LTNode* pos, LTDataType x);

在pos位置之后插入数据的List.c的代码:

cs 复制代码
void LITNEST(LTNode* pos, LTDataType x)
{
	assert(pos);

	LTNode* newnode = LTBuyNode(x);

	newnode->next = pos->next;
	newnode->prev = pos;

	pos->next->prev = newnode;
	pos->next = newnode;
}

它其实大致的思想和头删,尾删基本一致,无非就是位置改变了而已。

  • 有在pos上的插入就有在pos上的删除,删除pos的节点

删除pos的节点的List.h:

cs 复制代码
//删除pos的节点
void  LTTford(LTNode* pos);

void LTFind(LTNode* phead, LTDataType x);

删除pos的节点的List.c:

cs 复制代码
//在pos上删除
void  LTTford(LTNode* pos)
{
	assert(pos);

	pos->next->prev = pos->prev;

	pos->prev->next = pos->next;

	free(pos);
	pos = NULL;
}



 void LTFind(LTNode* phead, LTDataType x)
{
	assert(pos);

	LTNode* pcur = phead->next;
	while (pcur!=phead)
	{
		LTNode* next = pcur->next;
		free(pcur);
		pcur = NULL;
	}
	//此时pcur指向phead,而phead还没有被销毁
	free(phead);
	phead = NULL;
}
  • 对于,双链表的创建和实现,其实还有内容,但这是最核心的内容了。
相关推荐
hsling松子4 小时前
使用PaddleHub智能生成,献上浓情国庆福
人工智能·算法·机器学习·语言模型·paddlepaddle
dengqingrui1234 小时前
【树形DP】AT_dp_p Independent Set 题解
c++·学习·算法·深度优先·图论·dp
C++忠实粉丝4 小时前
前缀和(8)_矩阵区域和
数据结构·c++·线性代数·算法·矩阵
ZZZ_O^O5 小时前
二分查找算法——寻找旋转排序数组中的最小值&点名
数据结构·c++·学习·算法·二叉树
CV-King5 小时前
opencv实战项目(三十):使用傅里叶变换进行图像边缘检测
人工智能·opencv·算法·计算机视觉
代码雕刻家6 小时前
数据结构-3.9.栈在递归中的应用
c语言·数据结构·算法
雨中rain6 小时前
算法 | 位运算(哈希思想)
算法
IT良6 小时前
c#增删改查 (数据操作的基础)
开发语言·c#
yufei-coder6 小时前
掌握 C# 中的 LINQ(语言集成查询)
windows·vscode·c#·visual studio
Kalika0-07 小时前
猴子吃桃-C语言
c语言·开发语言·数据结构·算法