通用的双向链表(值得收藏)
来源:互联网 发布:js 树状关系图插件 编辑:程序博客网 时间:2024/05/18 02:51
头文件
typedef struct tagListNode
{
struct tagListNode *pNext;
struct tagListNode *pPrev;
}ListNode;
//遍历所有节点
#define List_ForEach(pos,head) /
for ((pos) = (head)->pNext; (pos) != (head); (pos) = (pos)->pNext)
//遍历所有节点(允许删除当前节点pos)
#define List_ForEachSafe(pos,next,head) /
for ((pos) = (head)->pNext,(next)=(pos)->pNext; (pos) != (head); (pos) = (next),(next)=(next)->pNext)
#define List_Entry(p,type,member) (type*)((char *)(p)-(int)(&(((type*)0)->member)))
//检查链表是否为空
#define List_Empty(head) ((head)->pNext==(head))
//声明一个初始化的链表头
#define LIST_HEAD(name) ListNode name = {&name,&name}
//初始化链表头
#define INIT_LIST_HEAD(pNode) (pNode)->pPrev=(pNode)->pNext=(pNode);
//把一个新节点插入到pNode之前
extern void List_InsertBefore(ListNode *pNew, ListNode *pNode);
//把一个新节点插入到pNode之后
extern void List_InsertAfter(ListNode *pNew, ListNode *pNode);
//从链表删除一个节点
extern void List_Del(ListNode *entry);
源文件
#define List_Add(newl,prev,next); /
do{ /
newl->pNext = next; /
newl->pPrev = prev; /
(newl->pNext)->pPrev = newl; /
(newl->pPrev)->pNext = newl; /
}while(0);
//把一个新节点插入到pNode之前
void List_InsertBefore(ListNode *newl, ListNode *pNode)
{
List_Add(newl,pNode->pPrev,pNode);
}
//把一个新节点插入到pNode之后
void List_InsertAfter(ListNode *newl, ListNode *pNode)
{
List_Add(newl,pNode,pNode->pNext);
}
//从链表删除一个节点
void List_Del(ListNode *entry)
{
entry->pPrev->pNext=entry->pNext;
entry->pNext->pPrev=entry->pPrev;
entry->pPrev=0;
entry->pNext=0;
}
- 通用的双向链表(值得收藏)
- 通用的双向链表
- 通用双向链表
- 双向链表的通用模板
- 关于通用双向链表的使用
- 简单通用的双向链表
- 一个通用的双向链表
- vim值得收藏的表
- 值得程序员收藏的bug信息表!
- 用ASP写的一个通用双向链表
- 通用双向链表的C语言实现
- 双向循环链表 C语言通用编程的思考
- 通用双向链表及宏的使用
- C语言通用双向链表的实现
- 【Redis】对通用双向链表实现的理解
- 实现通用的双向链表(c语言实现)
- 值得收藏的BLOG
- 值得收藏的短信
- 初探ACEGI
- 轻松在线制作各种Logo标志
- ASP.NET 2.0 中的代码隐藏和编译(有些地方写的不是最清楚,但内容不错)
- SQL,SQL2000:数据表命名和字段命名方法[原创]
- java 常用的学习资源
- 通用的双向链表(值得收藏)
- 保险网站
- 从校园人到职业人的转变
- 用友华表Cell组件最新版完美注册破解(5.3.9.13)
- 今天21岁!
- css1
- Delphi 下全局对象的使用
- 在Weblogic下配置MYSQL——JNDI
- FCKeditor编辑器在JAVA中的使用与配置