📄 list_n.c
字号:
#include "config.h"
/* 函数原型 */
/* 操作: 初始化一个列表 */
/* 操作前: plist 指向一个列表 */
/* 操作后: 该列表被初始化为空列表 */
void InitializeList(List_N * plist)
{
* plist = NULL;
}
/* 操作: 确定列表是否为空列表 */
/* 操作前: plist指向一个已经初始化的列表 */
/* 操作后: 如果该列表为空则返回true */
/* 否则返回false */
BOOLEAN ListIsEmpty(const List_N * plist)
{
if (*plist == NULL)
return TRUE;
else
return FALSE;
}
/* 操作: 确定列表是否已满 */
/*操作前: plist是一个已经初始化的列表 */
/* 操作后: 如果该列表已满则返回true */
/* 否则返回false */
BOOLEAN ListIsFull(const List_N * plist,INT16U len_stru)
{
List_N pt;
BOOLEAN full;
pt = (List_N) malloc(len_stru);
if (pt == NULL)
full = TRUE;
else
full = FALSE;
free(pt);
return full;
}
/* 操作: 确定列表中项目数 */
/* 操作前: plist指向一个已初始化的列表 */
/* 操作后: 函数返回列表中的项目数 */
INT32U ListItemCount(const List_N * plist)
{
INT32U count = 0;
List_N pnode = *plist; /* set to start of list */
while (pnode != NULL)
{
++count;
pnode = pnode->next; /* set to next node */
}
return count;
}
/* 操作: 在列表结尾加入新项 */
/* 操作前: item是要被增加到列表的项目 */
/* plist指向一个已初始化的列表 */
/* 操作后: 如果可能的话,在列表尾部添加一个新项目 */
/* 函数返回true; 否则函数返回false */
BOOLEAN AddItem(void * item, List_N * plist,INT16U len_stru)
{
List_N pnew;
List_N scan = *plist;
pnew = (List_N) malloc(len_stru);
if (pnew == NULL)
return FALSE; /* quit function on failure */
pnew->item=(void *) malloc(len_stru-4);
if (pnew->item == NULL)
return FALSE;
memcpy(pnew->item,item,len_stru-4);
pnew->next = NULL;
if (scan == NULL) /* empty list, so place */
*plist = pnew; /* pnew at head of list */
else
{
while (scan->next != NULL)
scan = scan->next; /* find end of list */
scan->next = pnew; /* add pnew to end */
}
return TRUE;
}
/* 操作: 把一个函数作用于列表中的每个项目 */
/* plist指向一个已初始化的列表 */
/* pfun指向一个函数 */
/* 该函数接受一个Item参数并且无返回值 */
/* 操作后: pfun指向的函数被做用到列表中的每个项目一次 */
void Traverse (const List_N * plist,INT16U CommType, void (* pfun)(void * item,INT16U commType) )
{
List_N pnode = *plist; /* set to start of list */
while (pnode != NULL)
{
(*pfun)(pnode->item,CommType); /* apply function to item */
pnode = pnode->next; /* advance to next item */
}
}
/* 操作: 把一个函数作用于列表中的每个项目 */
/* plist指向一个已初始化的列表 */
/* pfun指向一个函数 */
/* 该函数接受一个Item参数并且无返回值 */
/* 操作后: pfun指向的函数被做用到列表中的每个项目一次 */
void Traverse_u (const List_N * plist,INT16U commType,INT8U * buff,INT16U * inewlen,
void (* pfun)(void * item,INT16U commType,INT8U * buff,INT16U * inewlen) )
{
List_N pnode = *plist; /* set to start of list */
while (pnode != NULL)
{
(*pfun)(pnode->item,commType,buff,inewlen); /* apply function to item */
pnode = pnode->next; /* advance to next item */
}
}
/* 操作: 释放已分配的内存(如果有) */
/* plist指向一个已初始化的列表 */
/* 操作后: 为该列表分配的内存已被释放 */
/* 并且该列表被置为空列表 */
void EmptyTheList(List_N * plist)
{
List_N psave;
while (*plist != NULL)
{
psave = (*plist)->next; /* save address of next node */
free((*plist)->item);
free(*plist); /* free current node */
*plist = psave; /* advance to next node */
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -