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

用发呆的时间来理清自己的思绪

文章存档

2015年(7)

2014年(134)

2013年(40)

分类: C/C++

2014-06-13 20:44:51

    栈是一种具有“后进先出”特点的数据结构,具有广泛的应用,其实现方法如下:

点击(此处)折叠或打开

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

  4. #define MAX 10

  5. //顺序栈中,能存数的元素个数为MAX个
  6. //1.类型定义
  7. typedef int data_t;

  8. typedef struct
  9. {
  10.     //保存数据元素
  11.     data_t buf[MAX];
  12.     //保存当前栈顶位置下标;
  13.     int top;
  14. }seqstack_t;


  15. //常用操作
  16. //1.创建空顺序栈
  17. seqstack_t *creat_empty_seqstack()
  18. {
  19.     seqstack_t *s = NULL;

  20.     //1.为空栈在堆区分配空间
  21.     s = (seqstack_t *)malloc(sizeof(seqstack_t));

  22.     //2.元素下标值置为-1,表示栈为空栈
  23.     s->top = -1;

  24.     //3.返回在堆区分配的首地址
  25.     return s;
  26. }


  27. //2.栈判空
  28. int is_empty_seqstack(seqstack_t *s)
  29. {
  30.     //比较s->top 和 -1 的关系
  31.     return s->top == -1;
  32. }

  33. //3.栈判满
  34. int is_full_seqstack(seqstack_t *s)
  35. {
  36.     //比较s->top和MAX -1的关系
  37.     return s->top == MAX - 1;
  38. }

  39. //4.入栈
  40. int push_seqstack(seqstack_t *s,data_t data)
  41. {
  42.     //先移动s->top指针,再插入数据
  43.     s->top++;
  44.     s->buf[s->top] = data;

  45.     return 0;
  46. }

  47. //5.出栈
  48. data_t pop_seqstack(seqstack_t *s)
  49. {
  50.     data_t data;

  51.     //先移走数据,再移动top
  52.     data = s->buf[s->top];
  53.     s->top--;

  54.     return 0;
  55. }

  56. //6.获取栈顶元素
  57. data_t get_top_seqstack(seqstack_t *s)
  58. {
  59.     //只返回其栈顶元素,不移动指针s->top
  60.     return s->buf[s->top];
  61. }


  62. int main(int argc, const char *argv[])
  63. {
  64.     int i = 0;
  65.     seqstack_t *s = NULL;

  66.     s = creat_empty_seqstack();

  67.     while(!is_full_seqstack(s))
  68.     {
  69.         push_seqstack(s,i++);
  70.         printf("%-5d",get_top_seqstack(s));
  71.     }

  72.     putchar('\n');

  73.     while(!is_empty_seqstack(s))
  74.     {
  75.         printf("%-5d",get_top_seqstack(s));
  76.         pop_seqstack(s);
  77.     }

  78.     putchar('\n');


  79.     return 0;
  80. }
结果如下:

点击(此处)折叠或打开

  1. litong@ltubuntu:~$ ./a.out
  2. 0 1 2 3 4 5 6 7 8 9
  3. 9 8 7 6 5 4 3 2 1 0

阅读(440) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~