AMPS:双向链表源码解读 (四)
tDuplicate);
int DList_RemoveFromData(t_AMPSDList* r_poDList, void* r_pvData, AMPS_LListRemoveLinkDataCallback r_pfAMPS_LListRemoveLinkDataCallback);
#ifdef __cplusplus
}
#endif
#endif /* __HEADER_AMPS_LINKLIST_H__ */
AMPS_LinkList.c
/*****************************************************************
文件名称: AMPS_LinkList.c
功能描述: 链表操作API函数(单向链表和双向链表)
*****************************************************************/
#include "AMPS_LinkList.h"
#include "AMPS_MemMgt.h"
/*****************************************************************
函数名称: DList_Init
功能描述: 双向链表初始化
入参::
t_AMPSDList** new_list 原链表
出参:
NA
返回值:
t_AMPSDList* 原链表
*****************************************************************/
t_AMPSDList* DList_Init(t_AMPSDList** new_list)
{
*new_list = AMPS_InternalMalloc(sizeof(t_AMPSDList));
if (*new_list != NULL)
{
(*new_list)->uchCount = 0;
(*new_list)->poAMPSSListHead = NULL;
}
return *new_list;
}
/*****************************************************************
函数名称: DList_Concat
功能描述: 连接两个双向链表
入参::
t_AMPSDList** src 链表1
t_AMPSDList* dst 链表2
出参:
t_AMPSDList** src 连接后的链表
返回值:
int
*****************************************************************/
int DList_Concat(t_AMPSDList** src, t_AMPSDList* dst)
{
/*使用单向链表连接函数*/
if (AMPS_SUCCESS != SList_Concat(&(*src)->poAMPSSListHead, dst->poAMPSSListHead))
{
return AMPS_ERROR_FAILURE;
}
/*目的链表结点个数*/
(*src)->uchCount += dst->uchCount;
AMPS_InternalFree(dst);
return AMPS_SUCCESS;
}
/*****************************************************************
函数名称: DList_Append
功能描述: 向双向链表中追加结点
入参::
t_AMPSDList** src 原链表
void* pvData 待追加结点
出参:
NA
返回值:
t_AMPSDList** src 追加后的链表
*****************************************************************/
t_AMPSSList* DList_Append(t_AMPSDList* list, void* pvData)
{
t_AMPSSList *new_list = NULL; // pointer to newly created node
t_AMPSSList *last = NULL; // pointer to last node of link list
t_AMPSSList *list_ptr = list->poAMPSSListHead;
new_list = AMPS_InternalMalloc(sizeof(t_AMPSSList));
if (NULL == new_list)
{
return NULL;
}
new_list->pvData = pvData;
new_list->poAMPSSListNext = NULL;
new_list->poAMPSSListPrev = NULL;
if (list_ptr)
{
/*找到结尾*/
last = SList_Last(list_ptr);
if (NULL == last)
{
AMPS_InternalFree(new_list);
return NULL;
}
/*增加结点*/
last->poAMPSSListNext = new_list;
new_list->poAMPSSListPrev = last;
} else
{
list->poAMPSSListHead = new_list;
}
/*结点个数加1*/
list->uchCount += 1;
return new_list;
}
/*****************************************************************
函数名称: DList_Prepend
功能描述: 向双向链表中前向插入结点
入参::