C语言数据结构:利用两个顺序栈来实现一个列队的功能时遇到的问题
进在模拟进队操作时,当栈s1满,栈s2非空时,这时栈s1为何不能再执行进栈操作:我的想法是:此时可以先让栈s1出栈一部分元素,压入栈s2,然后栈s1不就能执行进栈操作了吗...
进在模拟进队操作时,当栈s1满,栈s2非空时,这时栈s1为何不能再执行进栈操作:我的想法是:此时可以先让栈s1出栈一部分元素,压入栈s2,然后栈s1不就能执行进栈操作了吗
展开
展开全部
假设s1、s2的深度都是3
s1已满,从栈顶到栈低依次是:5、4、3
s2非空,从栈顶到栈底依次是:1、2
此时要想在入栈一个元素6的话,按照你的想法,
得把s1的数据出栈到一个缓冲区,然后把缓冲区中,在原来s1栈底的3挪动到s2的栈顶,
然后s1的4、5依次压回栈s1,然后s1就能够空出栈顶的一个位置了,对吧?
但是,这个放置s1出栈元素的缓冲区。。。也得是一个栈结构吧?否则的话,你怎么知道s1向缓冲区出栈的u元素 顺序呢?
这样就不是双栈模拟队列了,势必还得用到一个中间栈s3来满足你这种处理方式~
因此,双栈模拟队列时,当栈s1满,栈s2非空时,栈s1再执行进栈操作。因为双栈是没有s3的~
s1已满,从栈顶到栈低依次是:5、4、3
s2非空,从栈顶到栈底依次是:1、2
此时要想在入栈一个元素6的话,按照你的想法,
得把s1的数据出栈到一个缓冲区,然后把缓冲区中,在原来s1栈底的3挪动到s2的栈顶,
然后s1的4、5依次压回栈s1,然后s1就能够空出栈顶的一个位置了,对吧?
但是,这个放置s1出栈元素的缓冲区。。。也得是一个栈结构吧?否则的话,你怎么知道s1向缓冲区出栈的u元素 顺序呢?
这样就不是双栈模拟队列了,势必还得用到一个中间栈s3来满足你这种处理方式~
因此,双栈模拟队列时,当栈s1满,栈s2非空时,栈s1再执行进栈操作。因为双栈是没有s3的~
追问
我不是这个意思,我的意思是此时要想在入栈一个元素6的话,可以先将s1的5直接出栈压入s2,此时s1不就能执行入栈元素6的操作了吗?也没用到缓冲区呀?
追答
这时把5压到s2的话,入栈s6后,怎么取队列的首元素?队列的首元素,是从s2出栈得到的,这时s2的栈顶是5,但是实际上原本的队首应该是1啊~
所以直接把5出栈压到s2,会破坏队列顺序~
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询