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

不卑不亢

文章分类

全部博文(17)

文章存档

2016年(1)

2015年(13)

2014年(3)

分类: C/C++

2015-03-21 14:24:59


点击(此处)折叠或打开

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

  3. #define STACK_DEBUG 1

  4. typedef struct _stack_ {
  5.     int *data;
  6.     int tlen;
  7.     int top;
  8. }stack_t;

  9. stack_t *stack_init(int len);
  10. void stack_destory(stack_t *stack);
  11. int stack_push(stack_t *stack, int value);
  12. int stack_pop(stack_t *stack, int *value);
  13. int stack_gettop(stack_t *stack, int *value);
  14. inline int stack_isfull(stack_t *stack);
  15. inline int stack_isempty(stack_t *stack);
  16. #if STACK_DEBUG
  17. int _stack_debug_(stack_t *stack);
  18. #endif

  19. int main()
  20. {
  21.     stack_t *stack = NULL;
  22.     int value = 100;
  23.     int i;

  24.     stack = stack_init(10);

  25.     while (0 == stack_push(stack, value))
  26.         value += 100;

  27.     if (-1 == stack_gettop(stack, &value))
  28.         puts("empty stack");
  29.     else
  30.         printf("Top Data: %d\n", value);
  31.     putchar('\n');

  32. #if STACK_DEBUG
  33.     _stack_debug_(stack);
  34. #endif
  35.     
  36.     putchar('\n');
  37.     puts("Stack_Pop:");
  38.     while (0 == stack_pop(stack, &value))
  39.         printf("%5d", value);
  40.     putchar('\n');
  41.     putchar('\n');

  42. #if STACK_DEBUG
  43.     _stack_debug_(stack);
  44. #endif
  45.     stack_destory(stack);

  46.     return 0;
  47. }

  48. stack_t *stack_init(int len)
  49. {
  50.     stack_t *stack = NULL;

  51.     stack = (stack_t *)malloc(sizeof(stack_t));
  52.     stack->top = 0;
  53.     stack->tlen = len;
  54.     stack->data = (int *)malloc(sizeof(int) * len);
  55.     
  56.     return stack;
  57. }

  58. void stack_destory(stack_t *stack)
  59. {
  60.     free(stack->data);
  61.     free(stack);
  62. }

  63. int stack_push(stack_t *stack, int value)
  64. {
  65.     if (stack_isfull(stack))
  66.         return -1;

  67.     stack->data[stack->top++] = value;

  68.     return 0;
  69. }

  70. int stack_pop(stack_t *stack, int *value)
  71. {
  72.     if (stack_isempty(stack))
  73.         return -1;

  74.     *value = stack->data[--stack->top];

  75.     return 0;
  76. }

  77. int stack_gettop(stack_t *stack, int *value)
  78. {
  79.     if (stack_isempty(stack))
  80.         return -1;

  81.     *value = stack->data[stack->top - 1];

  82.     return 0;
  83. }

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

  90. inline int stack_isempty(stack_t *stack)
  91. {
  92.     if (stack->top <= 0)
  93.         return 1;
  94.     return 0;
  95. }

  96. #if STACK_DEBUG
  97. int _stack_debug_(stack_t *stack)
  98. {
  99.     printf("*********************STACK_DEBUG***********************\n");
  100.     int index;

  101.     printf("tlen: %d\tTop: %d\n", stack->tlen, stack->top);
  102.     for (index = 0; index < stack->tlen; index++)
  103.         printf("%5d", stack->data[index]);
  104.     putchar('\n');

  105.     printf("*********************STACK_DEBUG***********************\n");

  106.     return 0;
  107. }
  108. #endif

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

上一篇:链式队列

下一篇:链式栈

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