单链表查找指定数范围、删除链表指定范围函数

//函数功能:查找指定范围的个数
//函数参数1:左边界
//函数参数2:右边界
//函数返回值:成功返回OK,失败返回失败原因
int SearchItem(DbLNode * pHead,int min,int max)
{
	//定义存储器
	int n = 0;
	//定义指针
	DbLNode *pTmp_Pre = pHead;
	DbLNode *pTmp = pHead->Next;
	//入参判断
	if(!pHead)  return DBLINK_NULL;
	if(pHead->Next == NULL)  return DBLINK_EMPTY;
	while(pTmp->Next != NULL)
	{
		if(pTmp->Data <= max && pTmp->Data >= min)
		{
			n++;
		}
		pTmp = pTmp->Next;
		pTmp_Pre = pTmp_Pre->Next;
	}
	if(pTmp->Data <= max && pTmp->Data >= min)
	{
		n++;
	}
	printf("%d\n",n);
	return OK;
}

int ShowList(DbLNode *pHead)
{
	DbLNode *pTmp = NULL;
	//入参判断
	if(!pHead) return DBLINK_NULL;
	pTmp = pHead->Next;//指向首届殿
	//从首届殿打印到为结点
	while(pTmp != NULL)
	{
		printf("%d ", pTmp->Data);
		pTmp = pTmp->Next;
	}
	printf("\n");
	return OK;
}


//函数功能:删除指定范围元素
//函数参数1:待删除元素的链表
//函数参数2:删除的左边界
//函数参数3:删除的右边界
//函数返回值:成功返回OK。失败返回失败原因
int DeleteItem(DbLNode *pHead, int Leftpos, int Rightpos)
{
	int i = 0;
	int n = 0;//计数器
	DbLNode *pDel = NULL;  //定义变量
	DbLNode *pTmp = NULL;  //定义变量
	DbLNode *pDel_Pre = pHead ; //初始化
	//入参判断
	if(!pHead) return DBLINK_NULL;
	//能否被删除元素
	if(NULL == pHead->Next)  return DBLINK_EMPTY;
	//判断能否执行
	if(Leftpos < 0 || Rightpos < 0)  return  POS_ERR;
	//删除元素
	pDel = pHead->Next;
	//1。找到要删除的元素
	while(i<Leftpos && pDel!=NULL)
	{
		//往后移动
		pDel = pDel->Next;
		pDel_Pre = pDel_Pre->Next;
		i++;
	}
	if(pDel == NULL) return POS_ERR;
	//循环删除
	for(int j = Leftpos;j <= Rightpos; j++)
	{
		//2.存储空间
		pTmp = pDel;
		//pDel位移到下个区域
		pDel = pDel->Next;
		//3.删除
		if(pTmp->Next != NULL) 
		{
			pTmp->Next->Pre = pDel_Pre;
		}
		pDel_Pre->Next = pTmp->Next;
		//4.释放空间
		free(pTmp);
		n++;
		//5.判断是否尾删
		if(pDel_Pre == NULL)  
		{
			printf("共删除了%d个数\n",n);
			return OK;
		}
	}
	printf("共删除了%d个数\n",n);
	return OK;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值