剑指offer06-用两个栈实现一个队列
Posted RebeccaG
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer06-用两个栈实现一个队列相关的知识,希望对你有一定的参考价值。
题目:
用两个栈来实现一个队列,完成队列的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]]
以上是关于剑指offer06-用两个栈实现一个队列的主要内容,如果未能解决你的问题,请参考以下文章