【面试专题04】Python全栈日记-栈和队列相互实现

版权声明:作者:人学物理死的早 出处:https://blog.csdn.net/weixin_39561473 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。 https://blog.csdn.net/weixin_39561473/article/details/86517453

这回面试题来自掌阅的面试

通过这个图就能发现,虽然是python面试,但是很多部分都是数据结构的题,这是因为,数据结构难度比较大,能全做出来面试基本就稳了

但是把我就有个疑问,一个正常工作的人真的能做出来这种题么?

我感觉不经过培训肯定是无法完全做对这种题的,而且面试你的人都不一定能做对。

不说废话了进入正题。

栈:先进后出 1,2,3,4进入取出来顺序为4,3,2,1

扫描二维码关注公众号,回复: 5040274 查看本文章

队:先进先出1,2,3,4进入1,2,3,4取出

1、两个栈实现队

我们把1,2,3,4进入一个栈取出来后变为4,3,2,1,再把4,3,2,1放入另一个栈取出来后变为1,2,3,4,这就实现了队的先进先出。

代码:

结果:

实现了先入先出。

2、两个队实现栈

网上有个好理解的方法但是是有bug的,当取到最后一个元素时,向第一个队中添加元素,就会导致在取出时顺序发生改变,不过可以通过插旗或者多重判断避免,但是很麻烦。有兴趣的可以自己完善,代码如下:

出bug的结果:

我们模拟栈应该实现的是先进后出,也就是后进先出,我们取到就剩一个1的时候,又添加了6,再取应该先取6.但是结果是:

问题出在了:

if len(self.queue1)==1 and len(self.queue2)>1:和elif len(self.queue2)==1 and len(self.queue1)>=1:上当取到最后一个判断的时候判断的不够详细。

我们讲一个高端的两个队实现栈的方法:

我们设置:

队1为专门存储元素用的队

队2为专门弹出元素用的队

我们给队1传入1,2,3,4.然后取出直到队1只剩1个元素,也就是4,把取出的元素放入队2。然后把队1中剩余的4取出来。这样最后传入4,首先取出4。

我们要求的是队1存储元素,队2是弹出元素的,现在对2中有元素,所以调换队1和队2的名字,

然后继续执行取出直到队1只剩1个元素,也就是3,把取出的元素放入队2。然后把队1中剩余的3取出来。这样最后传入4,3,首先取出4,3。

再调换名字,依此类推:

代码实现:

结果:

猜你喜欢

转载自blog.csdn.net/weixin_39561473/article/details/86517453