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

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

尾删所对应的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;
}
  • 对于,双链表的创建和实现,其实还有内容,但这是最核心的内容了。
相关推荐
染指111011 分钟前
19.0环保护进程-Windows驱动
windows·驱动开发·内核·保护
历程里程碑1 小时前
LeetCode热题11:盛水容器双指针妙解
c语言·数据结构·c++·经验分享·算法·leetcode·职场和发展
YJlio1 小时前
Windows Sysinternals 文件工具学习笔记(12.11):综合实战——从磁盘告警到文件替换的一条龙排障
windows·笔记·学习
_OP_CHEN1 小时前
【C++数据结构进阶】从B + 树 / B * 树到数据库索引:B树的进化之路与 MySQL 实战解析
数据结构·数据库·b树·mysql·innodb·b+树·mylsam
是一个Bug8 小时前
Java基础50道经典面试题(四)
java·windows·python
wadesir8 小时前
Rust中的条件变量详解(使用Condvar的wait方法实现线程同步)
开发语言·算法·rust
阿蒙Amon8 小时前
C#每日面试题-重写和重载的区别
开发语言·c#
yugi9878388 小时前
基于MATLAB实现协同过滤电影推荐系统
算法·matlab
TimberWill8 小时前
哈希-02-最长连续序列
算法·leetcode·排序算法
Morwit9 小时前
【力扣hot100】64. 最小路径和
c++·算法·leetcode