看了bsd的<sys/queue.h>源码,才知道C语言能通过宏实现C++模板的功能,真是太强大了! 我也学习着写了一个stack模板。有什么好的建议欢迎留言啊~~ "stack.h" #ifndef MICRO_STACK_H #define MICRO_STACK_H #include <string.h> #include <stdlib.h> #define STACK_NODE(name) name##__node #define STACK_TEMPLATE(name,type) / struct STACK_NODE(name) / { / type data; / STACK_NODE(name) *next; / }; / typedef struct / { / STACK_NODE(name) *top; / }name #define STACK_INIT(stack) / do{(stack)->top=NULL;}while(0) #define STACK_IS_EMPTY(stack) / ((stack)->top==NULL) #define STACK_GET_TOP(stack) / ((stack)->top->data) #define STACK_POP(stack,node) / do{ / if((stack)->top==NULL) break; / (node)=(stack)->top; / (stack)->top=(stack)->top->next; / }while(0) #define STACK_PUSH(stack,node) / do{ / if((node)==NULL) break; / (node)->next=(stack)->top; / (stack)->top=(node); / }while(0) #define STACK_NEW_NODE(name,node,value) / do{ / (node) = (struct STACK_NODE(name)*) / malloc(sizeof(struct STACK_NODE(name))); / if((node)) (node)->data = value; / }while(0) #define STACK_DEL_NODE(node) / do{ / free((node)); / (node) = NULL; / }while(0) #endif 用法示例: #include <stdio.h> #include "stack.h" int main() { STACK_TEMPLATE(istack,int);/* typedef stack<int> istack; */ istack stack1; struct STACK_NODE(istack) *p=NULL; STACK_INIT(&stack1); STACK_NEW_NODE(istack,p,10); STACK_PUSH(&stack1,p); printf("%d/n",STACK_GET_TOP(&stack1)); STACK_NEW_NODE(istack,p,20); STACK_PUSH(&stack1,p); printf("%d/n",STACK_GET_TOP(&stack1)); STACK_NEW_NODE(istack,p,30); STACK_PUSH(&stack1,p); printf("%d/n",STACK_GET_TOP(&stack1)); while(!STACK_IS_EMPTY(&stack1)) { STACK_POP(&stack1,p); printf("%d/n",p->data); STACK_DEL_NODE(p); }; return 0; }