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

xiaoxiao2021-02-28  61

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; }

转载请注明原文地址: https://www.6miu.com/read-81889.html

最新回复(0)