两种实现 无头结点单向链表 的插入、查找、删除

typedef struct _struDmixAlgLink{
int DmixObj;
void *pstAlgObj;
struct _struDmixAlgLink *next;

}struDmixAlgLinkObj, *pstDmixAlgLinkObj;


// test_link.cpp : 定义控制台应用程序的入口点。
//


#include <stdlib.h>
#include <string.h>
#include "TL_DmixAlgLink.h"


struDmixAlgLinkObj *g_pstruDmixAlgObj = NULL;


//单向链表的创建
struDmixAlgLinkObj *DmixAlgInitList(int DmixObj, void  *pstAlgObj)
{  
struDmixAlgLinkObj *pNode;  


pNode = (struDmixAlgLinkObj *)malloc(sizeof(struDmixAlgLinkObj));   //éê??í·?áμ?????  
if(NULL == pNode)
{
return 0;
}
pNode->next =NULL;
pNode->DmixObj   = DmixObj;
pNode->pstAlgObj = pstAlgObj;
return pNode;
}
void LinkedListPopFront(struDmixAlgLinkObj **pstDmixAlgLinkHead)  //í·é?
{
if (*pstDmixAlgLinkHead == NULL)//??á′±í
{
return;
}
else if ((*pstDmixAlgLinkHead)->next == NULL)//??óDò????áμ?
{
*pstDmixAlgLinkHead = NULL;
}
else
{
struDmixAlgLinkObj *tmp = (*pstDmixAlgLinkHead)->next;//tmp???ò?-?èí·?áμ????òμ???ò???????
free(*pstDmixAlgLinkHead);
*pstDmixAlgLinkHead = tmp;
}
}
int LinkedListInsert(struDmixAlgLinkObj **pstDmixAlgLinkHead,int DmixObj, void  *pstAlgObj)  
{  
struDmixAlgLinkObj *pNode;  
struDmixAlgLinkObj *p;
if(NULL == *pstDmixAlgLinkHead)
{
*pstDmixAlgLinkHead  = DmixAlgInitList(DmixObj, pstAlgObj );

}
else
{
struDmixAlgLinkObj *p = *pstDmixAlgLinkHead;
while(p->next)
{
p = p->next;
}
p->next = DmixAlgInitList(DmixObj, pstAlgObj );
}

return 1;   





//单链表的删除,在链表中删除值为x的元素  
void LinkedListDelete(struDmixAlgLinkObj **pstDmixAlgLinkHead,int DmixObj)   
{  
struDmixAlgLinkObj *p,*pre,*pnode;                   //pre为前驱结点,p为查找的结点。   


if(NULL == *pstDmixAlgLinkHead)
{
return;
}
else
{
p = *pstDmixAlgLinkHead;
pre = *pstDmixAlgLinkHead;


while(p!=NULL)
{
if((p->DmixObj == DmixObj))
{
break;
}
pre = p;
p = p->next;
}
pnode = p;


pre->next = pnode->next;
if (pre == p)
{
             *pstDmixAlgLinkHead = p->next;
}
free(p);

}    




//查找单向链表的内容
struDmixAlgLinkObj * LinkedListSearch(struDmixAlgLinkObj *pstDmixAlgLinkHead, int DmixObj, void **pstAlgObj)  
{
struDmixAlgLinkObj *pNode;
pNode = pstDmixAlgLinkHead;
if(NULL == pstDmixAlgLinkHead)
{
return;
}
while(pNode!= NULL)
{
if((DmixObj == pNode->DmixObj))
{
*pstAlgObj = pNode->pstAlgObj;
//return pstDmixAlgLinkHead;
break;
}
pNode = pNode->next;
}


return NULL;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值