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

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

尾删所对应的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;
}
  • 对于,双链表的创建和实现,其实还有内容,但这是最核心的内容了。
相关推荐
h39744 小时前
DirectShow过滤器开发-视频源过滤器
c++·windows·音视频·directshow
曹牧6 小时前
C#:未被引用的函数
c#
信奥卷王7 小时前
[GESP202609 六级] 分树规划
算法
夏幻灵7 小时前
LeetCode 21:合并两个有序链表——双指针与哑节点详解
算法·leetcode·链表
徐小黑ACG9 小时前
Golang 基础05 结构体struct
开发语言·算法·golang
码完就睡9 小时前
数据结构——红黑树
数据结构
码爸9 小时前
数据结构详细介绍
数据结构
Navigator_Z9 小时前
LeetCode //C - 1286. Iterator for Combination
c语言·算法·leetcode
北极有牛10 小时前
cpp学习笔记--常量指针
java·开发语言·算法