【问题标题】:stack using two queues in python在python中使用两个队列堆叠
【发布时间】:2021-09-01 07:55:46
【问题描述】:

在使用两个队列实现堆栈时,我收到此错误: 代码:

class Stacks():
    def __init__(self):
        self.q1=[]
        self.q2=[]
    def push(self,x):
        if len(self.q1)==0:
            self.q1.append(x)
            print("added")
        else:
            for i in range(len(self.q1)-1):
                self.q2.append(self.q1.pop(0))
            self.q1.append(x)
            for j in range(len(self.q2)-1):
                self.q1.append(self.q2.pop(0))

    def pop(self):
            return self.q1.pop(0)

s1=Stacks()
s1.push(1)
s1.push(2)
s1.push(3)
print(s1.pop())
print(s1.pop())
print(s1.pop())

执行此代码时,我得到 2 3 和错误(从空列表中弹出)。但我应该得到 3 2 1 。什么错误?

【问题讨论】:

  • range(len(self.q1)-1) 替换为range(len(self.q1)),第二个循环也一样。当前的实现错过了列表的最后一个元素。

标签: python queue stack


【解决方案1】:

在这里,为您修好了。错误是你不必要地减去了 1。

class Stacks():
    def __init__(self):
        self.q1=[]
        self.q2=[]
    def push(self,x):
        if len(self.q1)==0:
            self.q1.append(x)
        else:
            for i in range(len(self.q1)):
                self.q2.append(self.q1.pop(0))
            self.q1.append(x)
            for j in range(len(self.q2)):
                self.q1.append(self.q2.pop(0))
        print("added: "+str(x))

    def pop(self):
        return self.q1.pop(0)

s1=Stacks()
s1.push(1)
s1.push(2)
s1.push(3)
print("removed: "+str(s1.pop()))
print("removed: "+str(s1.pop()))
print("removed: "+str(s1.pop()))

【讨论】:

    猜你喜欢
    • 2011-03-31
    • 2011-05-01
    • 2014-04-21
    • 2011-11-29
    • 2010-10-15
    • 2017-12-21
    • 2018-06-14
    • 1970-01-01
    • 2010-09-09
    相关资源
    最近更新 更多