码迷,mamicode.com
首页 > 其他好文 > 详细

利用递归实现 两个队列实现一个栈的教程 写的超级详细小白都能看懂!

时间:2019-11-20 21:35:16      阅读:81      评论:0      收藏:0      [点我收藏+]

标签:queue   size   取出   一个   结束   div   deque   多少   实现   

这个好像是一个面试题 今天在一个聊天群看到了 所以感兴趣就试着写了一下

两个队列实现一个栈的原理

        栈的特点: 先进后出 ,就像你往你的旅行箱路面放衣服一样,第一件放进去一定是最后一个取出来的

        队列的特点: 先进先出 , 就像窗口排队打饭一样,先排队买的一定先打到饭,这里不计较插队! 只是比喻一下!

实现原理: 

        创建两个队列Q1,Q2,然后依次在Q1中插入 1 2 3 4 这四个数字,那我从Q1取的话 肯定是 1 2 3 4 这个顺序!,那如果要是栈的话,取的顺序是 4 3 2 1 对吗? 那不如这样 , 我们先把 1 2 3 取出来,放到Q2中 那这样的话Q1在取的话就是 4 了对吧 , 那我再从Q2中取出 1 2 放到了Q1中 那Q2 是不是剩下3了,就这样周而往复,是不是就实现了! 
 
技术图片

 

 

具体代码的实现

# 实现一个队列
class Queue():
    def __init__(self):
        self.item=[]
    # 队列的存入
    def equeue(self,item):
        self.item.insert(0,item)
    # 队列的取值
    def dequeue(self):
        return self.item.pop()
    def size(self):
        return len(self.item)

# 先实例化两个队列
Q1 = Queue()
Q2 = Queue()
# 向队列Q1中插入测试数据
test_data=["A","B","C","D","E","F","G","H"]
for data in test_data:
    Q1.equeue(data)

def func(Q1,Q2):
    # 取多少次不知道对吧
    count = Q1.size()
    for i in range(count-1):
        Q2.equeue(Q1.dequeue())
    print(Q1.dequeue()) # Q1 中留下的最后一个就是要取的那个
    if Q2.size()==1: # 递归的结束条件
        print(Q2.dequeue())
        return
    func(Q2,Q1) # Q1 与Q2颠倒
func(Q1,Q2)

  技术图片

 

 

 觉得还行加个粉哈
 
 
 
 

利用递归实现 两个队列实现一个栈的教程 写的超级详细小白都能看懂!

标签:queue   size   取出   一个   结束   div   deque   多少   实现   

原文地址:https://www.cnblogs.com/well-666/p/11900693.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!