看了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 = http://blog.soso.com/qz.q/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;
}
C语言实现stack模板
最新推荐文章于 2025-07-04 17:31:40 发布