栈的存储结构的实现(C/C++实现)
存档
- #include "iostream.h"
- #include <stdlib.h>
- #define max 20
- typedef char elemtype;
- #include "stack.h"
- void main()
- {
- stack s;
- char x;
- cout<<"(1)初始化栈s\n";
- initstack(s);
- cout<<"(2)栈为"<<(stackempty(s)?"空":"非空")<<endl;
- cout<<"(3)依次输入字母序列,以'#'结束"<<endl;
- cin>>x;
- while(x!='#')
- {
- push(s,x);
- cin>>x;
- }
- cout<<"(4)栈为"<<(stackempty(s)?"空":"非空")<<endl;
- cout<<"(5)栈长度stacklength(s):"<<stacklength(s)<<endl;
- cout<<"(6a)栈顶元素gettop(s)为:"<<gettop(s)<<endl;
- cout<<"(6b)栈顶元素gettop1(s,x)为:";
- gettop1(s,x);
- cout<<x<<endl;
- cout<<"(7)从栈顶到栈底元素printstack(s):";
- printstack(s);
- cout<<"(8)出栈pop1(s,x)的元素为:";
- pop1(s,x);
- cout<<x<<endl;
- cout<<"(9)出栈序列:";
- while(!stackempty(s))
- {
- cout<<pop(s)<<" ";
- }
- cout<<endl;
- cout<<"(10)栈为"<<(stackempty(s)?"空":"非空")<<endl;
- cout<<"(11)依次进栈元素a,b,c\n";
- push(s,'a');
- push(s,'b');
- push(s,'c');
- cout<<"(12)从栈顶到栈底元素printstack(s):";
- printstack(s);
- cout<<"(13)清空栈clearstack(s)\n";
- clearstack(s);
- cout<<"(14)栈为"<<(stackempty(s)?"空":"非空")<<endl;
- cout<<"(15)销毁栈"<<endl;
- destorystack(s);
- cout<<"(17)销毁栈后调用push(s,e)和printstack(s)"<<endl;
- push(s,'e');
- printstack(s);
- }
- struct stack
- {
- elemtype *base;//存栈元素
- elemtype *top;//栈顶指定器
- int stacksize;//栈的最大容量
- };
- void initstack(stack &s)
- {
- //构造一个空栈s
- s.base=new elemtype[max];//malloc()分配存储空间
- if(!s.base)
- exit(-);//#define OVERFLOW -2
- s.top=s.base;//空栈
- s.stacksize=max;//栈的存储容量
- }
- void clearstack(stack &s)
- {
- //清除栈s,使成为空栈
- s.top=s.base;//空栈栈顶指针和栈底指针相等
- }
- int stackempty(stack s)
- {
- //若栈s为空栈返回1,否则返回0
- if(s.top==s.base)
- return ;//空栈返回1,非空返回0
- else
- return ;
- }
- int stacklength(stack s)
- {
- //返回栈的长度
- return s.top-s.base;
- }
- void push(stack &s,elemtype e)
- {
- //元素e进栈
- if(!s.base)//栈不存在的处理
- {
- cout<<"栈不存在\n";
- return;
- }
- if(s.top-s.base>s.stacksize)//栈满的处理
- {
- cout<<"栈已满!\n";
- return;
- }
- *s.top=e;//元素e存进栈顶的位置
- s.top++;//栈顶指针指向栈顶元素的下一个位置
- }
- elemtype pop(stack &s)
- {
- //栈s的栈顶元素出栈并返回
- if(s.base==s.top)
- {
- cout<<"栈空,不能出栈\n";
- exit(-);
- }
- else
- {
- s.top--;//栈顶指针减1,下次进栈,会覆盖当前位置的值,相当于删除
- return *s.top;//返回栈顶元素的值
- }
- }
- int pop1(stack &s,elemtype &e)
- {
- //栈s的栈顶元素出栈并返回
- if(s.base==s.top)
- {
- cout<<"栈空,不能出栈\n";
- return ;
- }
- else
- {
- s.top--;//栈顶指针减1,下次进栈,会覆盖当前位置的值,相当于删除
- e=*s.top;
- return ;//返回栈顶元素的值
- }
- }
- elemtype gettop(stack s)
- {
- //取栈s的当前栈顶元素并返回
- if(s.top==s.base)
- {
- cout<<"栈空,获取栈顶元素失败"<<endl;
- exit(-);
- }
- else
- return *(s.top-);//top指针-1的位置才是栈顶元素所在的位置
- }
- int gettop1(stack s,elemtype &e)
- {
- //取栈s的当前栈顶元素并返回
- if(s.top==s.base)
- {
- cout<<"栈空,获取栈顶元素失败"<<endl;
- return ;
- }
- else
- e=*(s.top-);
- return ;//top指针-1的位置才是栈顶元素所在的位置
- }
- void printstack(stack s)
- {
- //输出栈中所有元素,但不出栈,不做任何修改
- int i;
- for(i=s.top-s.base-;i>=;i--)//总共s.top-s.base个元素,下标范围就是[0...(s.top-s.base-1)]
- cout<<s.base[i]<<" ";
- cout<<endl;
- }
- void destorystack(stack &s)
- {
- //销毁栈
- delete s.base;//销毁连续空间
- s.base=NULL;//指针赋空
- s.top=NULL;//指针赋空
- s.stacksize=;//栈容量赋0
- }
运行结果如下:
栈的存储结构的实现(C/C++实现)的更多相关文章
- C#创建安全的栈(Stack)存储结构
在C#中,用于存储的结构较多,如:DataTable,DataSet,List,Dictionary,Stack等结构,各种结构采用的存储的方式存在差异,效率也必然各有优缺点.现在介绍一种后进先出的数 ...
- 栈的存储结构和常见操作(c 语言实现)
俗话说得好,线性表(尤其是链表)是一切数据结构和算法的基础,很多复杂甚至是高级的数据结构和算法,细节处,除去数学和计算机程序基础的知识,大量的都在应用线性表. 一.栈 其实本质还是线性表:限定仅在表尾 ...
- C语言解释器的实现--存储结构(一)
目录: 1. 内存池 2. 栈 3. Hash表 1.内存池 在一些小的程序里,没什么必要添加内存管理模块在里面.但是对于比较复杂的代码,如果需要很多的内存操作,那么加入自己的内存管理是有必要的.至 ...
- C++编程练习(4)----“实现简单的栈的链式存储结构“
如果栈的使用过程中元素数目变化不可预测,有时很小,有时很大,则最好使用链栈:反之,如果它的变化在可控范围内,使用顺序栈会好一些. 简单的栈的链式存储结构代码如下: /*LinkStack.h*/ #i ...
- Java栈之链式栈存储结构实现
一.链栈 采用单链表来保存栈中所有元素,这种链式结构的栈称为链栈. 二.栈的链式存储结构实现 package com.ietree.basic.datastructure.stack; /** * 链 ...
- C#创建安全的字典(Dictionary)存储结构
在上面介绍过栈(Stack)的存储结构,接下来介绍另一种存储结构字典(Dictionary). 字典(Dictionary)里面的每一个元素都是一个键值对(由二个元素组成:键和值) 键必须是唯一的,而 ...
- 队列的存储结构和常见操作(c 语言实现)
一.队列(queue) 队列和栈一样,在实际程序的算法设计和计算机一些其他分支里,都有很多重要的应用,比如计算机操作系统对进程 or 作业的优先级调度算法,对离散事件的模拟算法,还有计算机主机和外部设 ...
- js数据结构与算法存储结构
数据结构(程序设计=数据结构+算法) 数据结构就是关系,没错,就是数据元素相互之间存在的一种或多种特定关系的集合. 传统上,我们把数据结构分为逻辑结构和物理结构. 逻辑结构:是指数据对象中数据元素之间 ...
- [置顶] ※数据结构※→☆线性表结构(queue)☆============优先队列 链式存储结构(queue priority list)(十二)
优先队列(priority queue) 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除.在优先队列中,元素被赋予优先级.当访问元素时,具有最高优先级的元素最先删除.优先队列具有 ...
随机推荐
- 【CSS3】表格、列表
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 安装cocoa pods时出现Operation not permitted - /usr/bin/xcodeproj的问题
安装cocoa pods时, 在命令行中输入: 安装:sudo gem install cocoapods报Operation not permitted - /usr/bin/xcodeproj这个 ...
- 为了CET-4!(二)
directions: For this part,you are allowed 30 minutes to write an eassay.Suppose there are two option ...
- androidSD卡操作
1.获取SD卡目录:File file = Environment.getExternalStorageDirectory(); 2.获取SD卡路径:String path = Environment ...
- Bmob 移动后端云服务器平台实现登录注册
源码下载:http://download.csdn.net/download/jjhahage/10034519 PS:一般情况下,我们在写android程序的时候,想要实现登录注册功能,可以选择自己 ...
- 随手记一下,VS2015卡顿问题解决。
不知道什么开始,vs2015卡顿的很,启动时加载项目很慢,调试是启动慢,停止调试时直接卡死半分钟.其他都还能忍受,最不能忍受的是点击停止调试按钮后十几秒没反应! 网上有解决方案如下几个,我试了,都不行 ...
- [编织消息框架][JAVA核心技术]cglib动态代理
先在mavne项目里添加cglib库 maven仓库搜索cglib版本 maven地址:http://mvnrepository.com/ 点击最新的版本 3.2.5 复制到pom.xml depe ...
- springBoot系列教程08:拦截器(Interceptor)的使用
拦截器intercprot 和 过滤器 Filter 其实作用类似 在最开始接触java 使用struts2的时候,里面都是filter 后来springmvc时就用interceptor 没太在意 ...
- IIS加载JSON文件 错误 404
问题描述 在发布项目的时候,有一些文件是json文件,在网页中进行加载,但是在IIS7发布的时候,json文件居然是404,无法找到,在URL上输入地址也一样. 错误原因 IIS内部机制,不支持直接访 ...
- QA问答系统,QA匹配论文学习笔记
论文题目: WIKIQA: A Challenge Dataset for Open-Domain Question Answering 论文代码运行: 首先按照readme中的提示安装需要的部分 遇 ...