⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 list_n.c

📁 C语言源代码及相关资料
💻 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 + -