存档

  1. #include "iostream.h"
  2. #include <stdlib.h>
  3. #define max 20
  4. typedef char elemtype;
  5. #include "stack.h"
  6. void main()
  7. {
  8. stack s;
  9. char x;
  10. cout<<"(1)初始化栈s\n";
  11. initstack(s);
  12. cout<<"(2)栈为"<<(stackempty(s)?"空":"非空")<<endl;
  13. cout<<"(3)依次输入字母序列,以'#'结束"<<endl;
  14. cin>>x;
  15. while(x!='#')
  16. {
  17. push(s,x);
  18. cin>>x;
  19. }
  20. cout<<"(4)栈为"<<(stackempty(s)?"空":"非空")<<endl;
  21. cout<<"(5)栈长度stacklength(s):"<<stacklength(s)<<endl;
  22. cout<<"(6a)栈顶元素gettop(s)为:"<<gettop(s)<<endl;
  23. cout<<"(6b)栈顶元素gettop1(s,x)为:";
  24. gettop1(s,x);
  25. cout<<x<<endl;
  26. cout<<"(7)从栈顶到栈底元素printstack(s):";
  27. printstack(s);
  28. cout<<"(8)出栈pop1(s,x)的元素为:";
  29. pop1(s,x);
  30. cout<<x<<endl;
  31. cout<<"(9)出栈序列:";
  32. while(!stackempty(s))
  33. {
  34. cout<<pop(s)<<" ";
  35. }
  36. cout<<endl;
  37. cout<<"(10)栈为"<<(stackempty(s)?"空":"非空")<<endl;
  38. cout<<"(11)依次进栈元素a,b,c\n";
  39. push(s,'a');
  40. push(s,'b');
  41. push(s,'c');
  42. cout<<"(12)从栈顶到栈底元素printstack(s):";
  43. printstack(s);
  44. cout<<"(13)清空栈clearstack(s)\n";
  45. clearstack(s);
  46. cout<<"(14)栈为"<<(stackempty(s)?"空":"非空")<<endl;
  47. cout<<"(15)销毁栈"<<endl;
  48. destorystack(s);
  49. cout<<"(17)销毁栈后调用push(s,e)和printstack(s)"<<endl;
  50. push(s,'e');
  51. printstack(s);
  52. }
  1. struct stack
  2. {
  3. elemtype *base;//存栈元素
  4. elemtype *top;//栈顶指定器
  5. int stacksize;//栈的最大容量
  6. };
  7. void initstack(stack &s)
  8. {
  9. //构造一个空栈s
  10. s.base=new elemtype[max];//malloc()分配存储空间
  11. if(!s.base)
  12. exit(-);//#define OVERFLOW -2
  13. s.top=s.base;//空栈
  14. s.stacksize=max;//栈的存储容量
  15. }
  16. void clearstack(stack &s)
  17. {
  18. //清除栈s,使成为空栈
  19. s.top=s.base;//空栈栈顶指针和栈底指针相等
  20. }
  21. int stackempty(stack s)
  22. {
  23. //若栈s为空栈返回1,否则返回0
  24. if(s.top==s.base)
  25. return ;//空栈返回1,非空返回0
  26. else
  27. return ;
  28. }
  29. int stacklength(stack s)
  30. {
  31. //返回栈的长度
  32. return s.top-s.base;
  33. }
  34. void push(stack &s,elemtype e)
  35. {
  36. //元素e进栈
  37. if(!s.base)//栈不存在的处理
  38. {
  39. cout<<"栈不存在\n";
  40. return;
  41. }
  42. if(s.top-s.base>s.stacksize)//栈满的处理
  43. {
  44. cout<<"栈已满!\n";
  45. return;
  46. }
  47. *s.top=e;//元素e存进栈顶的位置
  48. s.top++;//栈顶指针指向栈顶元素的下一个位置
  49. }
  50. elemtype pop(stack &s)
  51. {
  52. //栈s的栈顶元素出栈并返回
  53. if(s.base==s.top)
  54. {
  55. cout<<"栈空,不能出栈\n";
  56. exit(-);
  57. }
  58. else
  59. {
  60. s.top--;//栈顶指针减1,下次进栈,会覆盖当前位置的值,相当于删除
  61. return *s.top;//返回栈顶元素的值
  62. }
  63. }
  64. int pop1(stack &s,elemtype &e)
  65. {
  66. //栈s的栈顶元素出栈并返回
  67. if(s.base==s.top)
  68. {
  69. cout<<"栈空,不能出栈\n";
  70. return ;
  71. }
  72. else
  73. {
  74. s.top--;//栈顶指针减1,下次进栈,会覆盖当前位置的值,相当于删除
  75. e=*s.top;
  76. return ;//返回栈顶元素的值
  77. }
  78. }
  79. elemtype gettop(stack s)
  80. {
  81. //取栈s的当前栈顶元素并返回
  82. if(s.top==s.base)
  83. {
  84. cout<<"栈空,获取栈顶元素失败"<<endl;
  85. exit(-);
  86. }
  87. else
  88. return *(s.top-);//top指针-1的位置才是栈顶元素所在的位置
  89. }
  90. int gettop1(stack s,elemtype &e)
  91. {
  92. //取栈s的当前栈顶元素并返回
  93. if(s.top==s.base)
  94. {
  95. cout<<"栈空,获取栈顶元素失败"<<endl;
  96. return ;
  97. }
  98. else
  99. e=*(s.top-);
  100. return ;//top指针-1的位置才是栈顶元素所在的位置
  101. }
  102. void printstack(stack s)
  103. {
  104. //输出栈中所有元素,但不出栈,不做任何修改
  105. int i;
  106. for(i=s.top-s.base-;i>=;i--)//总共s.top-s.base个元素,下标范围就是[0...(s.top-s.base-1)]
  107. cout<<s.base[i]<<" ";
  108. cout<<endl;
  109. }
  110. void destorystack(stack &s)
  111. {
  112. //销毁栈
  113. delete s.base;//销毁连续空间
  114. s.base=NULL;//指针赋空
  115. s.top=NULL;//指针赋空
  116. s.stacksize=;//栈容量赋0
  117. }

运行结果如下:

栈的存储结构的实现(C/C++实现)的更多相关文章

  1. C#创建安全的栈(Stack)存储结构

    在C#中,用于存储的结构较多,如:DataTable,DataSet,List,Dictionary,Stack等结构,各种结构采用的存储的方式存在差异,效率也必然各有优缺点.现在介绍一种后进先出的数 ...

  2. 栈的存储结构和常见操作(c 语言实现)

    俗话说得好,线性表(尤其是链表)是一切数据结构和算法的基础,很多复杂甚至是高级的数据结构和算法,细节处,除去数学和计算机程序基础的知识,大量的都在应用线性表. 一.栈 其实本质还是线性表:限定仅在表尾 ...

  3. C语言解释器的实现--存储结构(一)

    目录: 1. 内存池 2. 栈 3. Hash表 1.内存池  在一些小的程序里,没什么必要添加内存管理模块在里面.但是对于比较复杂的代码,如果需要很多的内存操作,那么加入自己的内存管理是有必要的.至 ...

  4. C++编程练习(4)----“实现简单的栈的链式存储结构“

    如果栈的使用过程中元素数目变化不可预测,有时很小,有时很大,则最好使用链栈:反之,如果它的变化在可控范围内,使用顺序栈会好一些. 简单的栈的链式存储结构代码如下: /*LinkStack.h*/ #i ...

  5. Java栈之链式栈存储结构实现

    一.链栈 采用单链表来保存栈中所有元素,这种链式结构的栈称为链栈. 二.栈的链式存储结构实现 package com.ietree.basic.datastructure.stack; /** * 链 ...

  6. C#创建安全的字典(Dictionary)存储结构

    在上面介绍过栈(Stack)的存储结构,接下来介绍另一种存储结构字典(Dictionary). 字典(Dictionary)里面的每一个元素都是一个键值对(由二个元素组成:键和值) 键必须是唯一的,而 ...

  7. 队列的存储结构和常见操作(c 语言实现)

    一.队列(queue) 队列和栈一样,在实际程序的算法设计和计算机一些其他分支里,都有很多重要的应用,比如计算机操作系统对进程 or 作业的优先级调度算法,对离散事件的模拟算法,还有计算机主机和外部设 ...

  8. js数据结构与算法存储结构

    数据结构(程序设计=数据结构+算法) 数据结构就是关系,没错,就是数据元素相互之间存在的一种或多种特定关系的集合. 传统上,我们把数据结构分为逻辑结构和物理结构. 逻辑结构:是指数据对象中数据元素之间 ...

  9. [置顶] ※数据结构※→☆线性表结构(queue)☆============优先队列 链式存储结构(queue priority list)(十二)

    优先队列(priority queue) 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除.在优先队列中,元素被赋予优先级.当访问元素时,具有最高优先级的元素最先删除.优先队列具有 ...

随机推荐

  1. 【CSS3】表格、列表

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. 安装cocoa pods时出现Operation not permitted - /usr/bin/xcodeproj的问题

    安装cocoa pods时, 在命令行中输入: 安装:sudo gem install cocoapods报Operation not permitted - /usr/bin/xcodeproj这个 ...

  3. 为了CET-4!(二)

    directions: For this part,you are allowed 30 minutes to write an eassay.Suppose there are two option ...

  4. androidSD卡操作

    1.获取SD卡目录:File file = Environment.getExternalStorageDirectory(); 2.获取SD卡路径:String path = Environment ...

  5. Bmob 移动后端云服务器平台实现登录注册

    源码下载:http://download.csdn.net/download/jjhahage/10034519 PS:一般情况下,我们在写android程序的时候,想要实现登录注册功能,可以选择自己 ...

  6. 随手记一下,VS2015卡顿问题解决。

    不知道什么开始,vs2015卡顿的很,启动时加载项目很慢,调试是启动慢,停止调试时直接卡死半分钟.其他都还能忍受,最不能忍受的是点击停止调试按钮后十几秒没反应! 网上有解决方案如下几个,我试了,都不行 ...

  7. [编织消息框架][JAVA核心技术]cglib动态代理

    先在mavne项目里添加cglib库 maven仓库搜索cglib版本 maven地址:http://mvnrepository.com/ 点击最新的版本 3.2.5 复制到pom.xml  depe ...

  8. springBoot系列教程08:拦截器(Interceptor)的使用

    拦截器intercprot  和 过滤器 Filter 其实作用类似 在最开始接触java 使用struts2的时候,里面都是filter 后来springmvc时就用interceptor 没太在意 ...

  9. IIS加载JSON文件 错误 404

    问题描述 在发布项目的时候,有一些文件是json文件,在网页中进行加载,但是在IIS7发布的时候,json文件居然是404,无法找到,在URL上输入地址也一样. 错误原因 IIS内部机制,不支持直接访 ...

  10. QA问答系统,QA匹配论文学习笔记

    论文题目: WIKIQA: A Challenge Dataset for Open-Domain Question Answering 论文代码运行: 首先按照readme中的提示安装需要的部分 遇 ...