很多时候需要用到C语言方式的内置链表,根据处理类型多重交叉链接, 非常方便, 这里贴一下链表实现。
// 内置链表
#ifndef CoreLink_h__
#define CoreLink_h__
// 链表
struct LinkNode
{
LinkNode* next;
LinkNode* front;
};
// 初始化链表
#define InitLink(root) ((root)->next = (root)->front = (root))
// 添加到结尾
#define LinkAddToTail(root, node) \
{ \
(node)->next = (root); \
(node)->front = (root)->front; \
(root)->front->next = (node); \
(root)->front = (node); \
}
// 添加到头部
#define LinkAddToHead(root, node) \
{ \
(node)->next = (root)->front; \
(node)->front = (root); \
(root)->next->front = (node); \
(root)->next = (node); \
}
// 移除节点
#define LinkRemoveSelf(node) \
{ \
(node)->front->next = (node)->next; \
(node)->next->front = (node)->front;\
(node)->next = (node)->front = NULL;\
}
// 是否为空
#define LinkEmpty(root) ((root)->next