📄 ssp_sll.c
字号:
#include "syscfg.h"#ifdef __cplusplus#if __cplusplusextern "C"{#endif #endif #include "aos.h"SLL_NODE_S *SLL_Find(SLL_S *pList, VOID *pKey, S32 (*fnValCmp)(VOID *, SLL_NODE_S *)){ SLL_NODE_S *pNode; SLL_Scan(pList, pNode, SLL_NODE_S *) { if (!fnValCmp(pKey, pNode)) return pNode; } return NULL;}VOID SLL_Insert_In_Middle (SLL_S *pList, SLL_NODE_S *pPrev, SLL_NODE_S *pMid, SLL_NODE_S *pNext){ pList->u4_Count++; pMid->pNext = pNext; pPrev->pNext = pMid; if(pNext == &pList->Head) pList->Tail = pMid;}VOID SLL_Delete_In_Middle (SLL_S *pList, SLL_NODE_S *pPrev, SLL_NODE_S *pNode, SLL_NODE_S *pNext){ if(pNext == &pList->Head) pList->Tail = pPrev; pPrev->pNext = pNext; SLL_Init_Node(pNode); pList->u4_Count--;}VOID SLL_Delete (SLL_S *pList, SLL_NODE_S *pNode){ SLL_NODE_S *pPrev; if(!(SLL_Is_Node_In_List(pNode))) return; if((pPrev = SLL_Previous(pList,pNode)) == NULL) pPrev = &pList->Head; SLL_Delete_In_Middle(pList,pPrev,pNode,pNode->pNext);}SLL_NODE_S *SLL_Get (SLL_S *pList){ SLL_NODE_S *pRetNode; if(SLL_Count(pList) == 0) return(NULL); pRetNode = pList->Head.pNext; SLL_Delete_In_Middle(pList,&pList->Head,pList->Head.pNext,pList->Head.pNext->pNext); return(pRetNode);}VOID SLL_Insert (SLL_S *pList, SLL_NODE_S *pPrev, SLL_NODE_S *pNode){ if(pPrev == NULL) pPrev = &pList->Head; SLL_Insert_In_Middle(pList,pPrev,pNode,pPrev->pNext);}SLL_NODE_S *SLL_Previous (SLL_S *pList, SLL_NODE_S *pNode){ SLL_NODE_S *pPrev; if(pNode == NULL) return(SLL_Last(pList)); if (!SLL_Count(pList)) return NULL; for(pPrev = &pList->Head; pNode != pPrev->pNext ; pPrev = pPrev->pNext) { } return((pPrev == &pList->Head) ? NULL : pPrev);}VOID SLL_FreeAll (SLL_S *pList, VOID (*fnFree)(VOID *)){ SLL_NODE_S *pTempNode,*pNode,*pHead; for(pHead = &pList->Head,pNode = pList->Head.pNext; pNode != pHead; pNode = pTempNode){ pTempNode = pNode->pNext; fnFree(pNode); } SLL_Init(pList);}S32 SLL_Walk(SLL_S *pList, VOID (*fnVisit)(SLL_NODE_S *)){ SLL_NODE_S *pNode; S32 nCnt; nCnt = 0; SLL_Scan(pList, pNode, SLL_NODE_S *) { fnVisit(pNode); nCnt++; } return nCnt;}#ifdef __cplusplus#if __cplusplus}#endif #endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -