232  用栈实现队列功能

本文探讨如何利用两个栈来实现队列的基本功能,包括入队(enqueue)、出队(dequeue)操作。通过巧妙地转换栈的状态,可以在不使用额外数据结构的情况下,保持队列的FIFO(先进先出)特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                                                                                                                                点击此处返回总目录

 

【题目】

 

【分析】

设置两个栈。s1和s2。

(1)入队

当入队的时候,就放到s1中。

                                 

(2)出队

出队的时候,因为是拿出队首元素。也就是S1栈底元素。所以可以先把S1的数据依次出栈,然后放到S2。这样S2的栈顶元素就是S1的栈底元素。然后使用s2.pop()即可。拿完之后再放回到s1中。

                                 

 

(3)peek()

同出队操作。只不过s2使用peek()方法。

 

(4)empty()

判断s1是否为空即可。

 

代码:

 

结果:

 

效果一般般。

 

【改进】

上面的效果一般般。我们发现是因为出栈和peek()操作,把S1中的数据放入到S2中,然后再把S2中的放到S1中,来回倒腾数据。能不能改进呢?

其实放到S2中的数据是可以不放回去的。

比如:

                                     

出栈的时候,拿掉a,再出栈的时候拿掉b。不必每次都把S2中的元素先放回S1中。

改进之后,四个操作分别为:

(1)入队。直接放到s1中。

                                        

(2)出队。S2弹栈。当s2空了之后,如果s1中还有数据,要先把s1中的数据倒到s2中。(只有当s2空了之后,才能把s1的数据倒过来,否则顺序就乱了。)

                               

 

(3)peek()

跟出队相同。

 

(4)判空。

只有当s1和s2都为空才空。

 

 

代码:

 

结果:

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值