首页 > 其他分享 >doublelist_add

doublelist_add

时间:2024-04-23 21:57:33浏览次数:10  
标签:Head return next 链表 add Phead New doublelist

双向链表的插入操作的相关操作

1.头部插入

/*****************************************************************************
*                 函数名称:	HeadAdd
*                 函数功能:双向链表的头部插入
*                 函数参数:
*                          @a:*Head
*							操作的链表
*                          @b:data
*							添加的数据
*                 返回结果:	布尔型
*                 注意事项:none
*                 函数作者:[email protected]
*                 创建日期:2024/4/23
*                 修改历史:2024/4/23
*                 函数版本:1.0
*
*****************************************************************************/

bool HeadAdd(DoubleLList_t *Head,DataType_t data)
{
	DoubleLList_t *New = DoubleLList_NewNode( data);

	//对New进行错误判断
	if (NULL == New)
	{
		printf("can not insert new node\n");
		return false;
	}

	//判断链表是否为空
	if(	NULL == Head->next){
		Head->next = New;
		return true;
	}

	//如果链表为非空,则把新结点插入到链表的头部
	New->next = Head->next;
	Head->next->prev = New;
	Head->next = New;
	
	return true;
}

2.尾部插入

/*****************************************************************************
*                 函数名称:	HeadAdd
*                 函数功能:双向链表的尾部插入
*                 函数参数:
*                          @a:*Head
*							操作的链表
*                          @b:data
*							添加的数据
*                 返回结果:	布尔型
*                 注意事项:none
*                 函数作者:[email protected]
*                 创建日期:2024/4/23
*                 修改历史:2024/4/23
*                 函数版本:1.0
*
*****************************************************************************/
bool EndAdd(DoubleLList_t *Head,DataType_t data)
{
	DoubleLList_t *New = DoubleLList_NewNode( data);
	DoubleLList_t *Phead = Head;
	//1.对New进行错误判断
	if (NULL == New)
	{
		printf("can not insert new node\n");
		return false;
	}

	//2.判断链表是否为空
	if(	NULL == Head->next){
		Head->next = New;
		return true;
	}

	//3.如果链表为非空,则把新结点插入到链表的尾部

	//遍历链表
	while(Phead->next){

		//把头的直接后继作为新的头结点	
	
		Phead = Phead->next;
	}

	//插入
	Phead->next = New;
	New->prev   = Phead;
	return true;

}

3.中间插入

/*****************************************************************************
*                 函数名称:	HeadAdd
*                 函数功能:双向链表的中间插入
*                 函数参数:
*                          @a:*Head
*							操作的链表
*                          @b:data
*							添加的数据
*						 @c:location 
*							要删除的位置
*                 返回结果:	布尔型
*                 注意事项:要注意当插入为最后一个时,操作要注意是否越界,避免段错误
*                 函数作者:[email protected]
*                 创建日期:2024/4/23
*                 修改历史:2024/4/23
*                 函数版本:1.0
*
*****************************************************************************/
bool InsertAdd(DoubleLList_t *Head,DataType_t data,int location)
{
	DoubleLList_t *New = DoubleLList_NewNode( data);
	DoubleLList_t *Phead = Head;

	int cnt = 0; 									//记录遍历的位置


	//1.对New进行错误判断
	if (NULL == New)
	{
		printf("can not insert new node\n");
		return false;
	}

	//2.判断链表是否为空
	if(	NULL == Head->next){
		Head->next = New;
		return true;
	}

	//3.遍历链表
	while(Phead->next){
		
		//判断是否遍历到想要插入的位置
		if(cnt++ == location){
			break;
		}
		//把头的直接后继作为新的头结点	
		Phead = Phead->next;	
	}

	//4.刚刚好插入在最后一个
	//cnt 刚好记录了链表里有多少个元素
	if(cnt == location){

		Phead->next = New;
		New->prev   = Phead;
		return true;

	}
    //输入的值超过了链表的长度
	if(cnt < location){
		printf("插入的位置超出链表范围\n");
		return false;
	}
	//5.插入在找到位置的后面
	New->next         = Phead->next;
	Phead->next->prev = New ;
	New->prev         = Phead;
	Phead->next       = New;
	return 0;
}

标签:Head,return,next,链表,add,Phead,New,doublelist
From: https://www.cnblogs.com/waibibabu-/p/18153838

相关文章

  • Java并发工具类之LongAdder原理总结
    出处: Java并发工具类之LongAdder原理总结LongAdder实现原理图                                高并发下N多线程同时去操作一个变量会造成大量线程CAS失败,然后处于自旋状态,导致严重浪费CPU资源,降低了并发......
  • [Violation] Added non-passive event listener to a scroll-blocking <某些> 事件. C
    今天在网页控制台看到了这个警告[Violation]Addednon-passiveeventlistenertoascroll-blocking<某些>事件.Considermarkingeventhandleras'passive'tomakethepagemoreresponsive.See然后我发现是一款浏览器叫“沉浸式翻译-网页翻译插件|PDF翻译|......
  • js AddDays ,AddYears
    //日期类型变量格式化,默认格式"xxxx-xx-xx"Date.prototype.Format=function(fmt){fmt=fmt||"yyyy-MM-dd";varo={"M+":this.getMonth()+1,//月份"d+":this.getDate(),//日"h+":......
  • Cassandra节点重启失败 java.lang.RuntimeException: A node with address *** alread
    问题杀死一个节点后重启报节点已存在:java.lang.RuntimeException:Anodewithaddress***alreadyexists,cancellingjoin.Usecassandra.replace_addressifyouwanttoreplacethisnode.解决方法到另一个节点Cassandra的bin目录./nodetoolstatus查看需要重启......
  • paddleocr文字识别
    1.paddleocrPaddleOCR是一个基于PaddlePaddle深度学习框架的开源OCR(OpticalCharacterRecognition,光学字符识别)工具。它提供了一系列的预训练模型和工具,可以用于文本检测、文本识别和文本方向检测等任务。 提供了易于使用的PythonAPI,可以轻松地在你的项目中集成......
  • AddHandler导致的解析漏洞
    https://www.freebuf.com/vuls/303745.html在etc/apache/site-enabled下设置配置文件添加AddHandlerapplication/x-httpd-php.php然后重启apache服务配置问题导致总结:1)如果在Apache的/etc/apache2/apache2.conf里有这样的配置<FilesMatch"YLion.jpg">​SetHandler......
  • C#使用PaddleOCR进行图片文字识别
    PaddlePaddle介绍✨PaddlePaddle(飞桨)是百度开发的深度学习平台,旨在为开发者提供全面、灵活的工具集,用于构建、训练和部署各种深度学习模型。它具有开放源代码、高度灵活性、可扩展性和分布式训练等特点。PaddlePaddle支持端到端的部署,可以将模型轻松应用于服务器、移动设备和边缘......
  • php的addslashes()函数
    PHPaddslashes()函数addslashes()函数是PHP的一个内置函数,它返回一个在预定义的字符前会添加反斜杠的转义字符串。可以注:它不会在参数中使用任何指定的字符。预定义的字符是:●单引号(')●双引号(")●反斜杠(\)●空(null)值基本语法:addslashes($string)参数: ......
  • 阿里云域名使用ssl域名证书自动续期工具acme.sh报错Error add txt for domain:_acme-c
    现象:说明·acmesh-official/acme.shWiki·GitHub根据中文说明,第二步,第二种dns方法,执行生成证书时报此错,根据报错信息可知,是添加txtdns解析记录时出错原因:权限不足,阿里云为了提高安全性不建议直接使用主账号创建 AccessKey(因为默认权限过大),建议使用RAM用户(可以理......
  • 并发编程之AtomicInteger,AtomicLong,LongAdder
    系列文章目录文章目录系列文章目录前言前言前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。AtomicInteger类是系统底层保护的int类型,通过提供执行方法的控制进行......