• 【剑指offer】06-用两个栈实现一个队列


    题目:

    用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。


    思路:

    没有思路。不知道如何发挥。

    Push是入栈,入栈的元素在栈底部;Pop是出栈,出栈的元素是栈顶部的元素。

    栈:先入后出;队列:先入先出。

    看书后的思路:

    搞两个栈,一个栈用来存放数据,数据专门进入(push)到这个栈里面 => 都是站队尾,队列也是一样的操作。

    但是出栈,就要用到第二个栈,用来存放第一个栈出来的元素,A先出来的是顶部的,放进来B的时候在底下,所以B栈pop出来的,就是B顶部的,也就是原来先进入到A栈中的【如图,好理解】

    class Solution:
        def __init__(self):
            self.inStack = []
            self.outStack = []
    
        def push(self, node):
            self.inStack.append(node)
    
        def pop(self):
            if self.outStack:
                return self.outStack.pop()  # 第二个栈里面有值,挨个出栈
            elif not self.inStack:  # 第一个栈里啥也没有,返回空
                return None
            else:
                # 第二个栈里面为空,把第一个栈里面的挨个放进来,再出栈
                while self.inStack:
                    self.outStack.append(self.inStack.pop())
                return self.outStack.pop()

    两个队列实现一个栈


     思路:

    判断如果队列A只有一个元素,则直接出队。否则,把队A中的元素出队并入队B,直到队A中只有一个元素,再直接出队。为了下一次继续操作,互换队A和队B。

    class Stock:
        def __init__(self):
            self.queueA = []
            self.queueB = []
    
        def push(self, node):
            self.queueA.append(node)
    
        def pop(self):
            if len(self.queueA) == 0:
                return None
            while len(self.queueA) != 1:
                self.queueB.append(self.queueA.pop(0))
            self.queueA, self.queueB = self.queueB, self.queueA  # 交换队列 A,B的位置,为了下一次的pop
            return self.queueB.pop()

    复习append、insert、extend:

      append()方法是指在列表末尾增加一个数据项。

    a1 = [1, 2, 'a',[3,4]]
    a1.append(5)
    print (a1)
    
    # 结果: [1, 2, 'a',[3,4],5]

      extend()方法是指在列表末尾增加一个数据集合。

    a1.extend("cd")
    
    # 结果: [1, 2, 'a', [3, 4], 'c', 'd']

      insert()方法是指在某个特定位置前面增加一个数据项。

    a1= [1, 2, 'a',[3,4]]
    a1[1:1]=[7,8]
    print (a1)
    
    # 结果:[1, 7, 8, 2, 'a', [3, 4]]
  • 相关阅读:
    dubbo、dubbox、motan、thrift、grpc等RPC框架比较及选型
    web攻击之八:溢出攻击(nginx服务器防sql注入/溢出攻击/spam及禁User-agents)
    crontab的安装及crontab命令介绍
    开启Nginx的gzip压缩功能详解
    nginx限制请求之四:目录进行IP限制
    nginx上传目录配置,禁止执行权限
    EhCache 分布式缓存/缓存集群
    Nginx 反向代理、负载均衡、页面缓存、URL重写、读写分离及简单双机热备详解
    CDN模式介绍
    IT基础架构规划方案一(网络系统规划)
  • 原文地址:https://www.cnblogs.com/RebeccaG/p/11930830.html
Copyright © 2020-2023  润新知