【C语言实现共享栈】关于【共享栈】,你知道多少,快来看看吧
目录
一 、共享栈的基本概念
1.定义
2.特点
二、共享栈的表示
三、共享栈的基本操作
1.共享栈的初始化操作
2.共享栈的判空操作
3.共享栈的进栈操作
0号栈进栈
1号栈进栈
4.共享栈的出栈操作
0号栈出栈
1 号栈出栈
5.取栈顶元素
取0号栈栈顶元素
取1号栈栈顶元素
一 、共享栈的基本概念
1.定义
利用栈底位置的不变性,可让两个顺序栈共享一个一维数组,将两个栈的栈底分别设置在共享空间的两端,两个栈顶向共享空间的中间延申。
2.特点
共享栈是为了更有效的利用存储空间,两个栈的空间相互调节,只有在整个存储空间被占满时才发生上溢。其存储数据的时间复杂度均为O(1),对存取效率没有影响。
二、共享栈的表示
typedef struct {ElemType data[MaxSize];int top0;int top1;
}ShareStack;
三、共享栈的基本操作
栈空:两个栈的栈顶指针都指向栈顶元素,top0=-1时0号栈为空,top1=MaxSize时1号栈为空;
栈满:仅当两个栈顶指针(top1-top0=1)时,判断为栈满。
进栈:当0号栈进栈时,top0先加1,再赋值;1号栈进栈时,top1先减1,再赋值。
出栈:当0号栈出栈时,先赋值,top0再减1;1号栈出栈时,先赋值,top1再加1。
1.共享栈的初始化操作
void InitShareStack(ShareStack* shstack)
{shstack->top0 = -1; //初始化栈顶指针shstack->top1 = MaxSize;
}
2.共享栈的判空操作
int EmptySharaStack(ShareStack shstack)
{if (shstack.top0 == -1 && shstack.top1 == MaxSize) //两个栈都空时,返回1{return 2;} else if (shstack.top0 == -1) //0号栈为空,1号栈非空时,返回0{return 0;}else if (shstack.top1 == MaxSize) //1号栈为空,0号栈非空时,返回1{return 1;}return -1; //两个栈都非空时,返回-1
}
3.共享栈的进栈操作
0号栈进栈
bool PushTop0(ShareStack* shstack, ElemType e)
{if ((shstack->top1 - shstack->top0) == 1) //栈满,报错{return false; }shstack->top0++; //0号栈顶指针先加1shstack->data[shstack->top0] = e; //元素入栈return true;
}
1号栈进栈
bool PushTop1(ShareStack* shstack, ElemType e)
{if ((shstack->top1 - shstack->top0) == 1) //栈满,报错{return false;}shstack->top1--; //1号栈顶指针先减一shstack->data[shstack->top1] = e; //元素入栈return true;
}
4.共享栈的出栈操作
0号栈出栈
bool PopTop0(ShareStack* shstack, ElemType* e)
{if (shstack->top0 == -1) //1号栈空,报错{return false;}*e = shstack->data[shstack->top0]; //栈顶元素先出栈shstack->top0--; //栈顶指针再减1return true;
}
1 号栈出栈
bool PopTop1(ShareStack* shstack, ElemType* e)
{if (shstack->top1 == MaxSize) //1号栈空,报错{return false;}*e = shstack->data[shstack->top1]; //栈顶元素先出栈shstack->top1++; //栈顶指针再加1return true;
}
5.取栈顶元素
取0号栈栈顶元素
bool PopTop0(ShareStack* shstack, ElemType* e)
{if (shstack->top0 == -1) //1号栈空,报错{return false;}*e = shstack->data[shstack->top0]; //取栈顶元素return true;
}
取1号栈栈顶元素
bool PopTop1(ShareStack* shstack, ElemType* e)
{if (shstack->top1 == MaxSize) //1号栈空,报错{return false;}*e = shstack->data[shstack->top1]; //取栈顶元素return true;
}
Human is the animal with ideal.
The purpose of his life is to realize the ideal.
【C语言实现共享栈】关于【共享栈】,你知道多少,快来看看吧相关推荐
- 数据结构与算法(3-1)栈(顺序栈、两栈共享空间、链栈、栈的计算器)
目录 一.顺序栈 存储结构 总代码 二.两栈共享空间 存储结构: 总代码: 三.链栈 存储结构: 总代码: 一.顺序栈 存储结构: 栈特点:先进后出,后进先出.(特殊的线性表) 入栈时在栈顶添加元素, ...
- 数据结构之 顺序栈、共享栈、链栈
顺序栈.共享栈.链栈 一.思维导图: 二.栈的定义: 三.栈的特点: 四.栈的基本操作: 五.常考题型: 六.顺序栈: 1.思维导图: 2.顺序栈基本操作的实现: 1.定义栈: 2. 初始化栈:Ini ...
- 一个数组实现两个栈(共享栈)
题目: 一个数组实现两个栈. 方法1: 下标为0的位置为栈1的栈底,下标为1的位置为栈2的栈底,栈1的元素存放在下标为偶数的位置上,栈2的元素放在下标为奇数的位置上. 如上图所示的数组:若 ...
- 【数据结构】两栈共享空间(双端栈)
1.定义 两栈共享空间:使用一个数组来存储两个栈,让一个栈的栈底为该数组的始端,另一个栈的栈底为该数组的末端,两个栈从各自的端点向中间延伸. 栈1的底固定在下标为0的一端: 栈2的底固定在下标为Sta ...
- 【数据结构】共享栈详解 判断共享栈满条件栈顶指针变化详解记忆方法例题
摘要:简单易懂,详细地介绍共享栈概念,指针,判断共享栈栈满条件以及记忆方法等 目录 共享栈概念 栈顶指针&变化详解 栈顶指针种类的记忆方法 判断栈满条件 判断栈满条件的记忆方法 例题 解题思路 ...
- 两栈共享存储空间(线性结构栈)
#ifndef DOUBLESTACK_H #define DOUBLESTACK_H /*(1)引入1.如果需要两个相同类型的栈(顺序结构), 分别为了两个栈开辟存储空间.极有可能出现的情况是栈1已 ...
- 数据结构(C语言版) 第 三 章 栈与队列 知识梳理 + 作业习题详解
目录 一.栈 0.栈的基本概念 1.栈的实现 2.栈与递归 3.Hanoi塔问题 二.队列 0.队列的基本概念 1.队列的实现 2.循环队列 2.1循环队列的相关条件和公式: 3.链队列 4.链队列完 ...
- c语言出栈入栈指针的管理,设计顺序栈有关入栈和出栈的操作算法
问题描述: 设有两个栈s1.s2都釆用顺序栈方式,并且共享一个存储区[0, -, maxsize-1],为了尽量利用空间,减少溢出的可能,可釆用栈顶相向.迎面增长的存储方式.试设计s1.s2 有关入栈 ...
- C语言编程中的“堆”和“栈”七大不同之处
对于编程初学者来说会接触到一些难以理解的名称,比如堆(heap).栈(stack).堆栈(stack)等.初学开发过程中往往让人混淆不清.今天我们来谈谈堆和栈的具体区别,来帮助初学者理清思路. 堆和栈 ...
最新文章
- jQuery验证控件jquery.validate.js使用说明+中文API
- redispython源文件_Redis与Python在项目中的交互
- 定义指令时“控制器”,“链接”和“编译”函数之间的区别
- 人类资产数字化是大势所趋
- Silverlight Unit Test Framework
- CCIE理论-第五篇-SDA-2
- 树莓派打造mini广播(FM)系统
- Web前端开发解耦1
- img标签过滤加fs模块实现图片文件缓存
- 单词计数 soj1076
- java~modelMapper需要注意的几点
- mysql Load Data InFile 的用法
- SSM项目源码基于ssm的NBA球队|篮球管理系统
- 人人网首页登录页面html码,仿人人网WordPress登陆注册界面
- 30行代码实现微信自动回复机器人
- 乓乓响再度冲刺港股:来自临时及应急服务客户毛利率达70%
- iText7 解套 (一) 原生方法输出带斜线表格
- jQuery+PHP实现微信大转盘抽奖 v1.0
- 中文图书期刊数据库文献检索
- VIC Image 驱动程序