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

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

尾删所对应的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;
}
  • 对于,双链表的创建和实现,其实还有内容,但这是最核心的内容了。
相关推荐
水木流年追梦3 分钟前
大模型入门-Reward 奖励模型训练
开发语言·python·算法·leetcode·正则表达式
JavaWeb学起来3 分钟前
Python学习教程(六)数据结构List(列表)
数据结构·python·python基础·python教程
沙威玛_LHE13 分钟前
P13376题解
算法
DFT计算杂谈34 分钟前
KPROJ编译教程
java·前端·python·算法·conda
qq_3692243343 分钟前
Windows系统缺失ddraw.dll文件?游戏闪退、图形报错原因详解及处理办法
windows·游戏·dll·dll修复·dll丢失·dll错误
重生之我是Java开发战士1 小时前
【笔试强训】Week5:空调遥控, kotor和气球,走迷宫,主持人调度II,体操队形,二叉树的最大路径和,排序子序列,消减整数
java·算法·动态规划
xiaoshuaishuai81 小时前
C# 签名异常与Gas预估失败调试方案
开发语言·网络·tcp/ip·c#
xiaoshuaishuai81 小时前
C# Gemini 辅助网络安全漏洞分析
开发语言·web安全·c#
林下溪畔1 小时前
部署claude code(Windows版)
windows
风继续吹..1 小时前
C# 文件输入输出 精简理解
开发语言·c#