C语言数据结构:利用两个顺序栈来实现一个列队的功能时遇到的问题

进在模拟进队操作时,当栈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的~追问

我不是这个意思,我的意思是此时要想在入栈一个元素6的话,可以先将s1的5直接出栈压入s2,此时s1不就能执行入栈元素6的操作了吗?也没用到缓冲区呀?

追答

这时把5压到s2的话,入栈s6后,怎么取队列的首元素?队列的首元素,是从s2出栈得到的,这时s2的栈顶是5,但是实际上原本的队首应该是1啊~
所以直接把5出栈压到s2,会破坏队列顺序~

温馨提示:答案为网友推荐,仅供参考