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

来源:互联网 发布:c语言continue在if中 编辑:程序博客网 时间:2024/05/17 02:53
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
原创粉丝点击