【数据结构】两栈共享空间(双端栈)
1、定义
两栈共享空间:使用一个数组来存储两个栈,让一个栈的栈底为该数组的始端,另一个栈的栈底为该数组的末端,两个栈从各自的端点向中间延伸。
栈1的底固定在下标为0的一端;
栈2的底固定在下标为StackSize-1的一端。
top1和top2分别为栈1和栈2的栈顶指针;
Stack_Size为整个数组空间的大小(图中用S表示);
2、性质
栈1为空:top1= -1
栈2为空:top2= Stack_Size
栈满:top1+1==top2
3、两栈共享空间类的声明
const int Stack_Size=100;
template <class T>
class BothStack
{public:BothStack( );~BothStack( ); void Push(int i, T x); T Pop(int i); T GetTop(int i); bool Empty(int i); private:T data[Stack_Size]; int top1, top2;
};
4、插入
伪代码
1. 如果栈满,则抛出上溢异常;
2. 判断是插在栈1还是栈2;2.1 若在栈1插入,则2.1.1 top1加1;2.1.2 在top1处填入x;2.2 若在栈2插入,则2.2.1 top2减1;2.2.2 在top2处填入x;
实现
template <class T>
void BothStack<T>::Push(int i, T x )
{if (top1==top2-1) throw "上溢";if (i==1) data[++top1]=x;if (i==2) data[--top2]=x;
}
5、删除
伪代码
1.若是在栈1删除,则1.1 若栈1为空栈,抛出下溢异常;1.2 删除并返回栈1的栈顶元素;
2.若是在栈2删除,则2.1 若栈2为空栈,抛出下溢异常;2.2 删除并返回栈2的栈顶元素;
实现
template <class T>
T BothStack<T>::Pop(int i){if (i==1) { if (top1== -1) throw "下溢";return data[top1--];}if (i==2) { if (top2==StackSize) throw "下溢";return data[top2++]; }
}
6、判断某个栈空算法
template <class T>
bool BothStack<T>::Empty(int i)
{ if(i==1){if(top1==-1) return 1;else return 0;}if(i==2) {if(top2==StackSize) return 1;else return 0;}
}
7、取某个栈栈顶的算法
template <class T>
T BothStack<T>::GetTop(int i)
{if(i==1) {if (top1!=-1) return data[top1];}if(i==2) {if(top2!=StackSize) return data[top2];}
}
【数据结构】两栈共享空间(双端栈)相关推荐
- 数据结构与算法(3-1)栈(顺序栈、两栈共享空间、链栈、栈的计算器)
目录 一.顺序栈 存储结构 总代码 二.两栈共享空间 存储结构: 总代码: 三.链栈 存储结构: 总代码: 一.顺序栈 存储结构: 栈特点:先进后出,后进先出.(特殊的线性表) 入栈时在栈顶添加元素, ...
- 顺序栈的实现和两栈共享空间
顺序栈的实现和两栈共享空间 一.顺序栈的实现 栈(stack)是限定仅在表尾进行插入或删除操作的线性表.我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的 ...
- 【数据结构】之两栈共享空间(C语言)
文章目录 引言 实现之两栈共享空间 插入元素 删除元素 完整代码 引言 栈的顺序存储还是很方便的,因为它只准栈顶进出元素,所以不存在线性表插入和删除时需要移动元素的问题.不过栈有一个比较大的缺陷,就是 ...
- 【数据结构】两栈共享空间的进一步理解
目录 前言 正文 对①中的理解: 对②中的疑惑: 对③④中的理解: 对栈满条件的理解: 总结 前言 在阅读<大话数据结构>时,对文中"两栈共享空间"中部分知识点存在困惑 ...
- c语言动态双端栈的原理,数据结构(C语言版)例题(第三章:栈和队列)
数据结构(C语言版)例题(第三章:栈和队列) 数据结构(C语言版)例题(第三章:栈和队列) (2008-05-09 12:33:13) 转载▼ ◆3.15③ 假设以顺序存储结构实现一个双向栈,即在一维 ...
- 两栈共享空间的存储结构设计
两栈共享空间的存储结构设计 概述 数据结构设计 算法设计 1. 入栈(需预先判断是否栈满) 2. 出栈(需预先判断是否栈空) 概述 由于栈的插入和删除操作具有它的特殊性,用顺序存储结构表示的栈插入或删 ...
- 两栈共享空间 C语言实现
/* 两栈共享空间 作者:S_hmily 日期:2011年8月31日 编译环境:VC6.0++ 栈1空 S->top1 == -1 栈2空 S->top2 == MaxSize 栈满 S- ...
- 数据结构--栈--两栈共享空间
如何将两个栈使用同一个内存空间 将一个栈的栈底为数据的终端,即下标为0 另一个栈的栈底为数据的末端,即下标为n-1 如下图: /*两栈共享空间结构*/ typedef struct { SElemTy ...
- 两栈共享存储空间(线性结构栈)
#ifndef DOUBLESTACK_H #define DOUBLESTACK_H /*(1)引入1.如果需要两个相同类型的栈(顺序结构), 分别为了两个栈开辟存储空间.极有可能出现的情况是栈1已 ...
最新文章
- Thinkphp小知识点
- E:VUE 插件 开发与使用 (一)
- 搜狗拼音输入法大头贴新增几个新的模板,欢迎使用.
- java字符串底层实现_「JAVA」细述合理创建字符串,分析字符串的底层存储,你不该错过...
- python博客源码下载_Python生成并下载文件后端代码实例
- 直接请求接口_「软件测试教程」基于postman进行接口测试实战
- Android学习之路十三:BroadCast
- 学习node js 之微信公众帐号接口开发 准备工作
- android颜色表
- [独库骑行之我们路过高山]玉希莫勒盖达坂顶上的震撼
- 知识蒸馏 | 综述: 知识的类型
- 力扣-1791. 找出星型图的中心节点
- 比特币技术Base58
- 2021别再废掉了!学会这个用这个做PPT,高效神器保住你的发际线~
- 软件工程知识点总结——第一、二部分
- Visual Studio 2013 旗舰版正式版密钥
- php病人叫号的源码,diy uan4 医院叫号系统页面,用在 排队 ,各大 ,人数很多, 很长 WEB(ASP,PHP,...) 238万源代码下载- www.pudn.com...
- vue element table expand 扩展行点击行展示且保证只展示一行
- 51CTO专访人人网黄晶:WEB开发需要随需应变(2)
- php消息撤回,QQ怎么在撤回消息后面加字?QQ消息撤回修改内容
热门文章
- diy 扫地机器人 滚刷_扫地机器人滚刷和边刷分别有什么作用
- VisualSVN Server安装失败解决
- Android折腾记——Linux on Android在Android手机上跑Linux教程
- docker多容器操作与强制删除容器的方法步骤
- Kafka的消息模型
- python3中将'\xb2\xbb\xca\xc7\xc4\xda\xb2\xbf\xbb\xf2\xcd\xe2\xb2\xbf\xc3\xfc\xc1\xee'转成中文
- 震惊:竟然有大神做出了地府后台管理系统!!!
- JAVA高并发多线程必须懂的50个问题
- 2020年广东省中高级工程师职称评定条件要求和通知
- lnk1120如何解决_fatal error LNK1120: 6 unresolved externals问题怎么解决?