AMPS:单向链表源码解读 (五)

2014-11-24 08:28:21 · 作者: · 浏览: 3
nter to newly created node
t_AMPSSList *list_ptr = *slist, *curr;
new_node = SList_Alloc(pvData);
if (NULL == new_node)
{
return -1;
}
if (list_ptr)
{
while (list_ptr)
{
if (AMPS_LLIST_KEY_IS_SMALLER == compare(list_ptr->pvData, pvData))
{
break;
}
curr = list_ptr;
list_ptr = list_ptr->poAMPSSListNext;
}
if(!list_ptr)
{
SList_AppendGivenNode((void **)&curr, (void*)new_node);
}
else
{
SList_PrependGivenNode(list, (void*)list_ptr,(void*)new_node);
}
}
else
{
*slist = new_node;
}
return 0;
}
}
/*****************************************************************
函数名称: SList_SortPrepend
功能描述: 链表排序
入参::
void **list 原链表
AMPS_LListCompareCallback compare 结点比较回调函数,由调用者实现
出参:
void **list 排序后的链表
返回值:
void
*****************************************************************/
void SList_SortPrepend(void** list,AMPS_LListCompareCallback compare)
{
t_AMPSSList** slist = (t_AMPSSList**)list;
t_AMPSSList *list_ptr = *slist;
if (list_ptr)
{
while (list_ptr)
{
t_AMPSSList* poAMPSSListNext = list_ptr->poAMPSSListNext;
/*保存待删除结点的内容*/
void* pvData = list_ptr->pvData;
/*从链表中删除结点*/
SList_Remove(slist,list_ptr,NULL);
/*将已删除结点的内容插入到排序后的链表*/
SList_InsertSortedPrepend((void **)slist,NULL,pvData,compare);
list_ptr = poAMPSSListNext;
}
}
}
/*****************************************************************
函数名称: SList_SortAppend
功能描述: 链表排序(严格递增)
入参::
void **list 原链表
AMPS_LListCompareCallback compare 结点比较回调函数,由调用者实现
出参:
void **list 排序后的链表
返回值:
void
*****************************************************************/
void SList_SortAppend(void** list,AMPS_LListCompareCallback compare)
{
t_AMPSSList** slist = (t_AMPSSList**)list;
t_AMPSSList *list_ptr = SList_Last(*slist);
if (list_ptr)
{
while (list_ptr)
{
t_AMPSSList* poAMPSSListPrev = list_ptr->poAMPSSListPrev;
void* pvData = list_ptr->pvData;
SList_Remove(slist,list_ptr,NULL);
SList_InsertSortedAppend((void **)slist,NULL,pvData,compare);
list_ptr = poAMPSSListPrev;
}
}
}
/*****************************************************************
函数名称: SList_Traverse
功能描述: 遍历并通过用户自定义的回调函数处理各结点
入参::
void **list 原链表
AMPS_LListProcessCallback compare 结点处理回调函数,由调用者实现
void* arg 回调函数参数
出参:
void **list 处理之后的链表
返回值:
int
*****************************************************************/
int SList_Traverse(void* list,AMPS_LListProcessCallback func,void* arg)
{
t_AMPSSList *slist = (t_AMPSSList*)list,*temp