zoukankan      html  css  js  c++  java
  • 利用递归实现 两个队列实现一个栈的教程 写的超级详细小白都能看懂!

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

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

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

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

    实现原理: 

            创建两个队列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)
    

      

     觉得还行加个粉哈
     
     
     
     
  • 相关阅读:
    MySql 用户 及权限操作
    MAC 重置MySQL root 密码
    在mac系统安装Apache Tomcat的详细步骤[转]
    Maven:mirror和repository 区别
    ES6 入门系列
    转场动画CALayer (Transition)
    OC 异常处理
    Foundation 框架
    Enum枚举
    Invalid App Store Icon. The App Store Icon in the asset catalog in 'xxx.app' can’t be transparent nor contain an alpha channel.
  • 原文地址:https://www.cnblogs.com/well-666/p/11900693.html
Copyright © 2011-2022 走看看