Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1585065
  • 博文数量: 399
  • 博客积分: 8508
  • 博客等级: 中将
  • 技术积分: 5302
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-14 09:28
个人简介

能力强的人善于解决问题,有智慧的人善于绕过问题。 区别很微妙,小心谨慎做后者。

文章分类

全部博文(399)

文章存档

2018年(3)

2017年(1)

2016年(1)

2015年(69)

2013年(14)

2012年(17)

2011年(12)

2010年(189)

2009年(93)

分类: LINUX

2010-11-27 01:18:13

 模板

多态

#define DEFINE_STACK_NODE(type, name)  \
struct name##_node{ \
type data; \
name##_node * prior; \
};

#define DEFINE_STACK(type , name )  \
DEFINE_STACK_NODE(type, name)  \
struct  name##stack{ \
int size; \
struct name##_node * base; \
struct name##_node * top; \
}name##_stack; \

#define init(name) \
do{ \
name##_stack.base = name##_stack.top=(name##_node *)0; \
name##_stack.size=0; \
}while(0)

#define top(name,elem)  \
do{ \
if(name##_stack.size){ \
*elem = name##_stack.top->data;\
}while(0)

#define push(name, elem) \
do{ \
name##_node * temp =(name##_node *)malloc(sizeof(name##_node)); \
temp->data=elem; \
++(name##_stack.size); \
if(1!=name##_stack.size) { \
temp->prior = name##_stack.top; \
name##_stack.top=temp; \
}else{ \
temp->prior =(name##_node *)0; \
name##_stack.top=name##_stack.base = temp; \
} \
}while(0)

#define pop(name, elem) \
do{\
name##_node * temp=name##_stack.top;\
if(name##_stack.size){ \
*elem = name##_stack.top->data; \
if(1!=name##_stack.size--){\
name##_stack.top = temp->prior;\
}else{\
name##_stack.top=name##_stack.base=(name##_node *)0; \
}\
free(temp);\
}\
}while(0)

#define clear(name) \
do{\
for(;name##_stack.size; --name##_stack.size){\
name##_node * temp = name##_stack.top;\
name##_stack.top=name##_stack.top->prior;\
free(temp);\
}\
}while(0)

#define length(name) name##_stack.size
#define empty(name) (!name##_stack.size)?1:0

阅读(1012) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~