首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

单链表的操作,该如何处理

2012-04-02 
单链表的操作下面是一个关于单链表的操作宏定义,请问能解释以下下面的代码吗??实在是看的很晕。。#define ZB

单链表的操作
下面是一个关于单链表的操作宏定义,请问能解释以下下面的代码吗??实在是看的很晕。。

#define ZB_SL_LIST_REMOVE(type, list, name, ent) \
do \
{ \
  type p; \
  type prev = 0; \
  for (p = (list ## _head) ; p ; prev = p, p = p->name ## _next) \
  { \
  if (p == (ent)) \
  { \
  if (prev) \
  { \
  prev->name ## _next = p->name ## _next; \
  if ((list ## _tail) == ent) \
  { \
  (list ## _tail) = prev; \
  } \
  } \
  else \
  { \
  (list ## _head) = p->name ## _next; \
  } \
  if (!(list ## _head)) \
  { \
  (list ## _tail) = 0; \
  } \
  break; \
  } \
  } \
} \
while (0)


[解决办法]
其实就相当于删除链表中的一个结点。
[解决办法]

C/C++ code
#define ZB_SL_LIST_REMOVE(type, list, name, ent) \do \{ \    //定义当前节点和前一个节点type p; \type prev = 0; \//开始循环,并初始化 p = list ## _head  p为头节点    for (p = (list ## _head) ; p ; prev = p, p = p->name ## _next) \    { \    //如果找到需要删除的节点    if (p == (ent)) \     { \     //判断前一个节点 是否非空,空则表示此时prev = 0    if (prev) \     { \     //删除节点    prev->name ## _next = p->name ## _next; \    //如果要删除的节点为尾节点则尾节点前置    if ((list ## _tail) == ent) \    { \    (list ## _tail) = prev; \    } \    } \    //prev为空    else \    { \    //则表明此时头节点等于 ent    (list ## _head) = p->name ## _next; \    } \  //最后检查list是为空,为空则置 尾也空    if (!(list ## _head)) \    { \    (list ## _tail) = 0; \    } \    break; \    } \    } \} \        while (0) 

热点排行
Bad Request.