AMPS:单向链表源码解读 (六)
List = NULL;
if(!slist)
{
return 0;
}
for(tempList = slist;tempList;tempList = tempList->poAMPSSListNext)
{
func(tempList->pvData,arg);
}
return 0;
}
/*****************************************************************
函数名称: SList_Traverse
功能描述: 复制一份原链表,在复制过程中可以处理各结点,以实现对于不同类型
结点的操作。
入参::
void** dest 目标链表
void* src 源链表
AMPS_LListCompareCallback compare 结点比较回调,没有使用
AMPS_LListCloneCallback clone 结点处理函数回调
出参:
void** dest 处理之后的链表
返回值:
int
*****************************************************************/
int SList_Copy(void** dest,void* src,AMPS_LListCompareCallback compare,AMPS_LListCloneCallback clone)
{
t_AMPSSList* srcList = (t_AMPSSList*)src;
void* pvData;
if(!srcList)
{
return 0;
}
for(;srcList;srcList = srcList->poAMPSSListNext)
{
/*逐一处理各结点,比如结点数据为char*,则需要strcpy,如为int,直接赋值*/
pvData = clone(srcList->pvData);
/*将处理后的结点插入目标链表,最后,两链表长度相同,但结点内容可以不同*/
SList_Append(dest,pvData,NULL);
}
return 0;
}
/*****************************************************************
函数名称: SList_AppendEx
功能描述: 向链表后追加结点,返回最终链表
入参::
t_AMPSSList** list 原链表
void* pvData 待追加结点
出参:
NA
返回值:
t_AMPSSList* 处理之后的链表
*****************************************************************/
t_AMPSSList* SList_AppendEx(t_AMPSSList** list, void* pvData)
{
t_AMPSSList** slist = (t_AMPSSList**)list;
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 = *slist;
new_list = SList_Alloc(pvData);
if(NULL == new_list)
{
return NULL;
}
if(list_ptr)
{
last = SList_Last(list_ptr);
if(NULL == last)
{
free(new_list);
return NULL;
}
last->poAMPSSListNext = new_list;
new_list->poAMPSSListPrev = last;
}
else
{
*slist = new_list;
}
return new_list;
}
/*****************************************************************
函数名称: SList_Prepend
功能描述: 向链表头追加结点,返回最终链表
入参::
t_AMPSSList** list 原链表
void* pvData 待追加结点
出参:
NA
返回值:
t_AMPSSList* 处理之后的链表
*****************************************************************/
t_AMPSSList* SList_Prepend(t_AMPSSList **list, void* pvData)
{
t_AMPSSList *new_list = NULL;
t_AMPSSList *list_ptr = *list;
new_list = (t_AMPSSList*)SList_Alloc(pvData);
if (NULL == new_list)
{
return NULL;
}
new_list->poAMPSSListNext = list_ptr;
new_list->poAMPSSListPrev = NULL;
if (list_ptr)
{
list_ptr->poAMPSSListPrev = new_list;
}
*list = new_list;
return new_list;
}
/*****************************************************************
函数名称: SList_Last
功能描述: 查找链表结尾
入参