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];}
}

【数据结构】两栈共享空间(双端栈)相关推荐

  1. 数据结构与算法(3-1)栈(顺序栈、两栈共享空间、链栈、栈的计算器)

    目录 一.顺序栈 存储结构 总代码 二.两栈共享空间 存储结构: 总代码: 三.链栈 存储结构: 总代码: 一.顺序栈 存储结构: 栈特点:先进后出,后进先出.(特殊的线性表) 入栈时在栈顶添加元素, ...

  2. 顺序栈的实现和两栈共享空间

    顺序栈的实现和两栈共享空间 一.顺序栈的实现 栈(stack)是限定仅在表尾进行插入或删除操作的线性表.我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的 ...

  3. 【数据结构】之两栈共享空间(C语言)

    文章目录 引言 实现之两栈共享空间 插入元素 删除元素 完整代码 引言 栈的顺序存储还是很方便的,因为它只准栈顶进出元素,所以不存在线性表插入和删除时需要移动元素的问题.不过栈有一个比较大的缺陷,就是 ...

  4. 【数据结构】两栈共享空间的进一步理解

    目录 前言 正文 对①中的理解: 对②中的疑惑: 对③④中的理解: 对栈满条件的理解: 总结 前言 在阅读<大话数据结构>时,对文中"两栈共享空间"中部分知识点存在困惑 ...

  5. c语言动态双端栈的原理,数据结构(C语言版)例题(第三章:栈和队列)

    数据结构(C语言版)例题(第三章:栈和队列) 数据结构(C语言版)例题(第三章:栈和队列) (2008-05-09 12:33:13) 转载▼ ◆3.15③ 假设以顺序存储结构实现一个双向栈,即在一维 ...

  6. 两栈共享空间的存储结构设计

    两栈共享空间的存储结构设计 概述 数据结构设计 算法设计 1. 入栈(需预先判断是否栈满) 2. 出栈(需预先判断是否栈空) 概述 由于栈的插入和删除操作具有它的特殊性,用顺序存储结构表示的栈插入或删 ...

  7. 两栈共享空间 C语言实现

    /* 两栈共享空间 作者:S_hmily 日期:2011年8月31日 编译环境:VC6.0++ 栈1空 S->top1 == -1 栈2空 S->top2 == MaxSize 栈满 S- ...

  8. 数据结构--栈--两栈共享空间

    如何将两个栈使用同一个内存空间 将一个栈的栈底为数据的终端,即下标为0 另一个栈的栈底为数据的末端,即下标为n-1 如下图: /*两栈共享空间结构*/ typedef struct { SElemTy ...

  9. 两栈共享存储空间(线性结构栈)

    #ifndef DOUBLESTACK_H #define DOUBLESTACK_H /*(1)引入1.如果需要两个相同类型的栈(顺序结构), 分别为了两个栈开辟存储空间.极有可能出现的情况是栈1已 ...

最新文章

  1. Thinkphp小知识点
  2. E:VUE 插件 开发与使用 (一)
  3. 搜狗拼音输入法大头贴新增几个新的模板,欢迎使用.
  4. java字符串底层实现_「JAVA」细述合理创建字符串,分析字符串的底层存储,你不该错过...
  5. python博客源码下载_Python生成并下载文件后端代码实例
  6. 直接请求接口_「软件测试教程」基于postman进行接口测试实战
  7. Android学习之路十三:BroadCast
  8. 学习node js 之微信公众帐号接口开发 准备工作
  9. android颜色表
  10. [独库骑行之我们路过高山]玉希莫勒盖达坂顶上的震撼
  11. 知识蒸馏 | 综述: 知识的类型
  12. 力扣-1791. 找出星型图的中心节点
  13. 比特币技术Base58
  14. 2021别再废掉了!学会这个用这个做PPT,高效神器保住你的发际线~
  15. 软件工程知识点总结——第一、二部分
  16. Visual Studio 2013 旗舰版正式版密钥
  17. php病人叫号的源码,diy uan4 医院叫号系统页面,用在 排队 ,各大 ,人数很多, 很长 WEB(ASP,PHP,...) 238万源代码下载- www.pudn.com...
  18. vue element table expand 扩展行点击行展示且保证只展示一行
  19. 51CTO专访人人网黄晶:WEB开发需要随需应变(2)
  20. php消息撤回,QQ怎么在撤回消息后面加字?QQ消息撤回修改内容

热门文章

  1. diy 扫地机器人 滚刷_扫地机器人滚刷和边刷分别有什么作用
  2. VisualSVN Server安装失败解决
  3. Android折腾记——Linux on Android在Android手机上跑Linux教程
  4. docker多容器操作与强制删除容器的方法步骤
  5. Kafka的消息模型
  6. python3中将'\xb2\xbb\xca\xc7\xc4\xda\xb2\xbf\xbb\xf2\xcd\xe2\xb2\xbf\xc3\xfc\xc1\xee'转成中文
  7. 震惊:竟然有大神做出了地府后台管理系统!!!
  8. JAVA高并发多线程必须懂的50个问题
  9. 2020年广东省中高级工程师职称评定条件要求和通知
  10. lnk1120如何解决_fatal error LNK1120: 6 unresolved externals问题怎么解决?