//函数功能:查找指定范围的个数
//函数参数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;
}
单链表查找指定数范围、删除链表指定范围函数
最新推荐文章于 2024-11-01 17:00:11 发布