Chinaunix首页 | 论坛 | 博客
  • 博客访问: 66582
  • 博文数量: 17
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 154
  • 用 户 组: 普通用户
  • 注册时间: 2014-05-12 22:56
个人简介

不卑不亢

文章分类

全部博文(17)

文章存档

2016年(1)

2015年(13)

2014年(3)

分类: C/C++

2015-03-21 14:25:38


点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. #define STACK_DEBUG 1

  4. typedef struct _stknode_ {
  5.     int data;
  6.     struct _stknode_ *next;
  7. }stknode_t;

  8. typedef struct _linkstack_ {
  9.     stknode_t *top;
  10.     int tlen;
  11.     int clen;
  12. }stack_t;

  13. stack_t *stack_init(int num);
  14. void stack_destory(stack_t *stack);
  15. int stack_push(stack_t *stack, int value);
  16. int stack_isfull(stack_t *stack);
  17. int stack_isempty(stack_t *stack);
  18. stknode_t *create_stknode(int value);
  19. int stack_gettop(stack_t *stack, int *value);
  20. int stack_pop(stack_t *stack, int *value);
  21. #if STACK_DEBUG
  22. void _stack_debug_(stack_t *stack);
  23. #endif

  24. int main()
  25. {
  26.     stack_t *stack = NULL;
  27.     int value = 100;

  28.     stack = stack_init(10);

  29.     while (-1 != stack_push(stack, value))
  30.         value += 100;

  31.     if (0 == stack_gettop(stack, &value))
  32.         printf("top value: %d\n", value);

  33. #if STACK_DEBUG
  34.     _stack_debug_(stack);
  35. #endif

  36.     puts("pop: ");
  37.     while (-1 != stack_pop(stack, &value))
  38.         printf("%5d", value);
  39.     printf("\n");

  40. #if STACK_DEBUG
  41.     _stack_debug_(stack);
  42. #endif
  43.     stack_destory(stack);

  44.     return 0;
  45. }

  46. stack_t *stack_init(int num)
  47. {
  48.     stack_t *stack = NULL;

  49.     stack = (stack_t *)malloc(sizeof(stack_t));
  50.     stack->top = NULL;
  51.     stack->clen = 0;
  52.     stack->tlen = num;

  53.     return stack;
  54. }

  55. void stack_destory(stack_t *stack)
  56. {
  57.     stknode_t *p = stack->top;
  58.     stknode_t *tmp = NULL;

  59.     while (NULL != p) {
  60.         tmp = p;
  61.         p = p->next;
  62.         free(tmp);
  63.         tmp = NULL;
  64.     }

  65.     free(stack);
  66. }

  67. int stack_push(stack_t *stack, int value)
  68. {
  69.     stknode_t *node = NULL;

  70.     if (stack_isfull(stack))
  71.         return -1;

  72.     node = create_stknode(value);
  73.     node->next = stack->top;
  74.     stack->top = node;

  75.     stack->clen++;

  76.     return 0;
  77. }

  78. int stack_isfull(stack_t *stack)
  79. {
  80.     if (stack->clen >= stack->tlen)
  81.         return 1;
  82.     return 0;
  83. }

  84. int stack_isempty(stack_t *stack)
  85. {
  86.     if (stack->top == NULL)
  87.         return 1;
  88.     return 0;
  89. }

  90. stknode_t *create_stknode(int value)
  91. {
  92.     stknode_t *node = NULL;

  93.     node = (stknode_t *)malloc(sizeof(stknode_t));
  94.     node->data = value;
  95.     node->next = NULL;

  96.     return node;
  97. }

  98. int stack_gettop(stack_t *stack, int *value)
  99. {
  100.     if (stack_isempty(stack))
  101.         return -1;
  102.     
  103.     *value = stack->top->data;

  104.     return 0;
  105. }

  106. int stack_pop(stack_t *stack, int *value)
  107. {
  108.     stknode_t *tmp = NULL;

  109.     if (stack_isempty(stack))
  110.         return -1;
  111.     
  112.     *value = stack->top->data;
  113.     stack->clen--;

  114.     tmp = stack->top;
  115.     stack->top = stack->top->next;
  116.     free(tmp);
  117.     tmp = NULL;

  118.     return 0;
  119. }

  120. #if STACK_DEBUG
  121. void _stack_debug_(stack_t *stack)
  122. {
  123.     stknode_t *p = stack->top;

  124.     puts("---------------- STACK_DEBUG -------------------");
  125.     printf("tlen: %d\tclen: %d\n", stack->tlen, stack->clen);
  126.     while (NULL != p) {
  127.         printf("%5d", p->data);
  128.         p = p->next;
  129.     }

  130.     puts("\n------------------------------------------------\n");    
  131.     return;
  132. }
  133. #endif

阅读(1526) | 评论(0) | 转发(0) |
0

上一篇:顺序栈

下一篇:atof的实现

给主人留下些什么吧!~~