C语言实现stack模板

本文介绍了一种使用C语言宏来实现栈模板的方法,并提供了一个具体的示例代码。通过这种方式,可以在C语言中实现类似C++模板的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 看了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; 

  } 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值