1、共享栈

定义:为了节省空间,在一个数组中实现两个栈。

2、数据结构

typedef int Position;
typedef int ElementType;
typedef struct SNode{ElementType *Data;Position top1;Position top2;int MaxSize;
}*Stack;

3、函数实现

Stack CreateStack( int MaxSize );
bool Push( Stack S, ElementType X, int Tag );
ElementType Pop( Stack S, int Tag );

3.1 初始化栈

Stack CreateStack( int MaxSize ){Stack S = new SNode;S->MaxSize = MaxSize;S->top1 = -1;S->top2 = MaxSize;S->Data = new ElementType[MaxSize];return S;
}

3.2 压栈

bool Push( Stack S, ElementType X, int Tag ){if(Tag == 1){if(S->top1+1 == S->top2){cout << "Stack Full" << endl;return false;}else{S->Data[++(S->top1)] = X;return true;}}else{if(S->top1+1 == S->top2){cout << "Stack Full" << endl;return false;}else{S->Data[--(S->top2)] = X;return true;}}
}

3.3 出栈

ElementType Pop( Stack S, int Tag ){if(Tag == 1){if (S->top1 == -1){printf("Stack %d Empty\n",Tag);return false;}else{return S->Data[(S->top1)--];}}else{if (S->top2 == S->MaxSize){printf("Stack %d Empty\n",Tag);return false;}else{return S->Data[(S->top2)++];}}
}

4、 完整代码

#include<iostream>
using namespace std;typedef int Position;
typedef int ElementType;
typedef struct SNode{ElementType *Data;Position top1;Position top2;int MaxSize;
}*Stack;Stack CreateStack( int MaxSize );
bool Push( Stack S, ElementType X, int Tag );
ElementType Pop( Stack S, int Tag );
int main(){Stack S = CreateStack(50);Push(S,10,1);cout << Pop(S,1) << endl;Push(S,12,2);cout << Pop(S,2) << endl;return 0;
}
Stack CreateStack( int MaxSize ){Stack S = new SNode;S->MaxSize = MaxSize;S->top1 = -1;S->top2 = MaxSize;S->Data = new ElementType[MaxSize];return S;
}bool Push( Stack S, ElementType X, int Tag ){if(Tag == 1){if(S->top1+1 == S->top2){cout << "Stack Full" << endl;return false;}else{S->Data[++(S->top1)] = X;return true;}}else{if(S->top1+1 == S->top2){cout << "Stack Full" << endl;return false;}else{S->Data[--(S->top2)] = X;return true;}}
}ElementType Pop( Stack S, int Tag ){if(Tag == 1){if (S->top1 == -1){printf("Stack %d Empty\n",Tag);return false;}else{return S->Data[(S->top1)--];}}else{if (S->top2 == S->MaxSize){printf("Stack %d Empty\n",Tag);return false;}else{return S->Data[(S->top2)++];}}
}

(6)数据结构-共享栈相关推荐

  1. 【数据结构】栈-顺序栈、链式栈、共享栈

    栈的定义 栈(Stack):只允许在一端进行插入或删除操作的线性表 栈顶(Top):线性表允许进行插入和删除的那一端. 栈底(Bottom):固定的,不允许进行插入和删除的另一端. Tips: 1.栈 ...

  2. 【数据结构与算法】共享栈的Java实现

    共享栈 在一个程序中如果同时具有相同类型的两个顺序栈,最直接的方法是为每个栈开辟一个一个数组空间,这样做的结果可能出现一个栈的空间已经被占满而无法再进行操作而另一个栈的空间仍有大量剩余而没有得到利用的 ...

  3. 大话数据结构08:共享栈 C++

    基础介绍 共享栈就是一块内存分配给两个栈,两个栈从各自端点向中间生长,就是计算机基础中内存栈的实现吧 代码 #include "stdio.h" #define OK 1 #def ...

  4. 数据结构之 顺序栈、共享栈、链栈

    顺序栈.共享栈.链栈 一.思维导图: 二.栈的定义: 三.栈的特点: 四.栈的基本操作: 五.常考题型: 六.顺序栈: 1.思维导图: 2.顺序栈基本操作的实现: 1.定义栈: 2. 初始化栈:Ini ...

  5. 数据结构 3-1-2 共享栈

    一.概念 共享栈是为了优化一般栈的空间利用而提出的优化,在线性栈的两端设置两个栈,共用整个空间,即在一个数组空间中实现了两个栈.可能在实际中并不会用到,但是在题目考察中还是会出现的. 共享栈是为了更有 ...

  6. 数据结构(共享栈的实现)

    1.定义 共享栈:两个栈共享同一片内存空间,两个栈从两边往中间增长. 目的:节省内存空间. 空栈判断:一号栈的栈顶指针为-1,二号栈的栈顶指针为MaxSize. 栈满判断:一号栈的栈顶指针位置等于二号 ...

  7. 【数据结构】共享栈详解 判断共享栈满条件栈顶指针变化详解记忆方法例题

    摘要:简单易懂,详细地介绍共享栈概念,指针,判断共享栈栈满条件以及记忆方法等 目录 共享栈概念 栈顶指针&变化详解 栈顶指针种类的记忆方法 判断栈满条件 判断栈满条件的记忆方法 例题 解题思路 ...

  8. 【数据结构】-共享栈

    共享栈 共享栈示意图 1.头文件及类型定义 2.共享栈类型定义 3.函数声明 4.基本操作 4.1 初始化共享栈 4.2 1号栈判空 4.3 2号栈判空 4.4 1号栈入栈 4.5 2号栈入栈 4.6 ...

  9. 内存、数据结构之栈和堆的区别?

    网上有一篇很好的文章,我差不多直接搬运过来了. 来源:http://www.cleey.com/blog/single/id/776.html 原文如下: 可能很多同学在这个概念上有些模糊,其实堆栈分 ...

  10. 数据结构 3-0 栈与队列总结

    总结 栈和队列都可以看作对输入输出做限制的线性表.其中栈是限制了输入和输出只能在一端进行的线性表,可以将其看作向箱子里面摞书,想要取出最下面的书必须要先拿出上面的书,对应栈先进后出的特点.而队列正如其 ...

最新文章

  1. java 滚动条 滚动_广告条随滚动条的移动而移动
  2. 成功解决ValueError: setting an array element with a sequence.
  3. java之IO流(一)
  4. 提前(qian)庆祝 “1024程序员节” ,价值 1500 元的京东卡免费送!
  5. Java知多少(96)绘图之设置字型和颜色
  6. c语言磁盘文件只有写没读,C语言的磁盘文件问题
  7. 3D 机器视觉 02 - FPGA生成N位元格雷码
  8. oracle 一个实例创建多个数据库_Oracle闪回,为你的数据库上一个安全防线
  9. usermod命令,用户密码管理,makpasswd
  10. BScroll切换才能滚动,刷新一下就不能滚动
  11. c语言快速学习,怎么才能正确快速的学习c语言
  12. Python基础:dict字典表
  13. 人工智能在物流行业的发展与应用
  14. PHP AES加密解密
  15. 强化学习gym的使用之mountaincar的训练
  16. WPS表格 下拉列表 两级下拉列表联动 多级下拉列表联动
  17. Android开发平台
  18. 虚幻引擎图文笔记:蓝图中二项切换节点(Flip Flop)的用法
  19. java饲养员喂动物_做一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处...
  20. 「 论文投稿 」《IEEE ACCESS》录用经历

热门文章

  1. js 获取/设置文本输入域内光标的位置的方法
  2. 使用oracle修改/etc/passwd /etc/passwd默认SHELL被修改后,无法...
  3. 【翻译】3D Bounding Box Estimation Using Deep Learning and Geometry
  4. 使用MySQL中的对象数组查询JSON列
  5. 第三季-第3课-Coredump程序故障分析
  6. HAOI2008 移动玩具
  7. LiveData源码解析
  8. ZStack源码剖析之核心库鉴赏——Defer
  9. lightoj 1029 最小生成树 + 最大生成树
  10. 使用GDB进行系统调用过程简析