c实现的一个经典链表

MIT试验中一个链表的c实现。用了很多宏定义:

/*
 * List declarations.
 */
#define LIST_HEAD(name, type)      /
struct name {        /
 struct type *lh_first; /* first element */   /
}

#define LIST_HEAD_INITIALIZER(head)     /
 { NULL }

#define LIST_ENTRY(type)      /
struct {        /
 struct type *le_next; /* next element */   /
 struct type **le_prev; /* address of previous next element */ /
}

/*
 * List functions.
 */

#define LIST_EMPTY(head) ((head)->lh_first == NULL)

#define LIST_FIRST(head) ((head)->lh_first)

#define LIST_FOREACH(var, head, field)     /
 for ((var) = LIST_FIRST((head));    /
     (var);       /
     (var) = LIST_NEXT((var), field))

#define LIST_INIT(head) do {      /
 LIST_FIRST((head)) = NULL;     /
} while (0)

#define LIST_INSERT_AFTER(listelm, elm, field) do {   /
 if ((LIST_NEXT((elm), field) = LIST_NEXT((listelm), field)) != NULL)/
  LIST_NEXT((listelm), field)->field.le_prev =  /
      &LIST_NEXT((elm), field);    /
 LIST_NEXT((listelm), field) = (elm);    /
 (elm)->field.le_prev = &LIST_NEXT((listelm), field);  /
} while (0)

#define LIST_INSERT_BEFORE(listelm, elm, field) do {   /
 (elm)->field.le_prev = (listelm)->field.le_prev;  /
 LIST_NEXT((elm), field) = (listelm);    /
 *(listelm)->field.le_prev = (elm);    /
 (listelm)->field.le_prev = &LIST_NEXT((elm), field);  /
} while (0)

#define LIST_INSERT_HEAD(head, elm, field) do {    /
 if ((LIST_NEXT((elm), field) = LIST_FIRST((head))) != NULL) /
  LIST_FIRST((head))->field.le_prev = &LIST_NEXT((elm), field);/
 LIST_FIRST((head)) = (elm);     /
 (elm)->field.le_prev = &LIST_FIRST((head));   /
} while (0)

#define LIST_NEXT(elm, field) ((elm)->field.le_next)

#define LIST_REMOVE(elm, field) do {     /
 if (LIST_NEXT((elm), field) != NULL)    /
  LIST_NEXT((elm), field)->field.le_prev =   /
      (elm)->field.le_prev;    /
 *(elm)->field.le_prev = LIST_NEXT((elm), field);  /
} while (0)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值