宏实现链表
来源:互联网 发布:java的标识符 编辑:程序博客网 时间:2024/05/16 10:06
#include<stdio.h>
#include<stdlib.h>
#define QNODE(type) \
struct { \
struct type *next; \
struct type **prev; \
}
#define QNODE_INIT(node, field) \
do { \
(node)->field.next = (node); \
(node)->field.prev = \
&(node)->field.next; \
} while ( /* */ 0 );
#define QFIRST(head, field) \
((head)->field.next)
#define QNEXT(node, field) \
((node)->field.next)
#define QEMPTY(head, field) \
((head)->field.next == (head))
#define QFOREACH(head, var, field) \
for ((var) = (head)->field.next; \
(var) != (head); \
(var) = (var)->field.next)
#define QINSERT_BEFORE(loc, node, field) \
do { \
*(loc)->field.prev = (node); \
(node)->field.prev = \
(loc)->field.prev; \
(loc)->field.prev = \
&((node)->field.next); \
(node)->field.next = (loc); \
} while (/* */0)
#define QINSERT_AFTER(loc, node, field) \
do { \
((loc)->field.next)->field.prev = \
&(node)->field.next; \
(node)->field.next = (loc)->field.next; \
(loc)->field.next = (node); \
(node)->field.prev = &(loc)->field.next; \
} while ( /* */ 0)
#define QREMOVE(node, field) \
do { \
*((node)->field.prev) = (node)->field.next; \
((node)->field.next)->field.prev = \
(node)->field.prev; \
(node)->field.next = (node); \
(node)->field.prev = &((node)->field.next); \
} while ( /* */ 0)
typedef struct wth
{
int state;
QNODE(wth) alist;
} wth;
int main()
{
wth* node;
wth* head;
wth* loc;
wth* var;
int x;
head=(wth*)malloc(sizeof(wth));
node=head;
loc=head;
QNODE_INIT(loc, alist);
int i;
for(i=0;i<5;i++)
{
scanf("%d",&x);
loc=(wth*)malloc(sizeof(wth));
QNODE_INIT(loc, alist);
loc->state=x;
//QINSERT_AFTER(node, loc, alist);//头插
QINSERT_BEFORE(node, loc, alist);//尾插
}
QFOREACH(head, var, alist)
printf("%d\n",var->state);
return 0;
}
0 0
- 宏实现链表
- Java栈实现:数组实现和链表实现
- C++实现队列--数组实现和链表实现
- C++实现队列--数组实现和链表实现
- 队列的实现--链表实现
- Josephus排列-红黑树实现-链表实现
- 实现循环链表(js实现)
- 链表实现队列 C++实现
- 栈实现队列,链表实现栈
- stack 底层简单实现 链表实现
- Java实现 链表实现队列
- 栈模型的实现--链表实现
- 链表的实现
- C#实现链表
- 实现双向链表
- JAVA实现链表
- 双向链表实现
- Java实现链表
- PLSQL Dev Win7配置使用全过程【包含软件下载、使用教程】
- 包与命名空间
- Redis异常汇总,希望可以帮助到你
- Eclipse自动下载开源源码方法
- Spring—Quartz定时调度CronTrigger时间配置格式说明与实例
- 宏实现链表
- Joseph--链表
- 前端速学成财:第三课-粗糙的玩一玩javascript的"编译"
- c动态链接库
- 网络基础知识
- 博客重用通知
- Kotlin语法(二)基础语法
- maven tomcat8 自动部署(支持tomcat7)
- Mac10.11 + Qt5.7 + OpenCV2.4.13