【问题标题】:Mirrorring a queue in python在python中镜像队列
【发布时间】:2015-07-14 12:33:36
【问题描述】:

我需要使用名为 mirror 的函数来镜像队列

我已经为队列类编写了代码,但我不知道如何创建它的镜像。它需要打印出原来的队列,然后把同一个队列倒过来

任何帮助将不胜感激

我的代码:

class Queue:
    def __init__(self):
        self.items = []
    def is_empty(self):
        return self.items == []
    def enqueue(self, item):
        self.items.insert(0,item)
    def dequeue(self):
        return self.items.pop()
    def is_empty(self):
        return not self.items
    def size(self):
        return len(self.items)

class Stack:
     def __init__(self):
         self.items = []
     def is_empty(self):
         return self.items == []
     def push(self, item):
         self.items.append(item)
     def pop(self):
         return self.items.pop()
     def peek(self):
         return self.items[len(self.items)-1]
     def size(self):
         return len(self.items)

def mirror(n):
    pass

【问题讨论】:

  • 想要将队列转换为堆栈吗?
  • 栈类的相关性是什么?

标签: python class stack queue reverse


【解决方案1】:

这会奏效。您的队列由一个列表组成,因此您可以在列表上使用slice syntax 来获取队列的反转版本。

class Queue:
    def __init__(self):
        self.items = []
    def enqueue(self, item):
        self.items.append(item)
    def __str__(self):
        '''Allow print to be called on the queue object itself'''
        return str(self.items)
    def __getitem__(self, i):
        '''Allow the queue object to be indexable directly'''
        return self.items[i]

def mirror(q):
    return q[::-1]

q = Queue()
for i in range(10):
    q.enqueue(i)

print q
print mirror(q)

注意:队列追加到末尾,而不是开头。这就是堆栈的行为。

【讨论】:

    【解决方案2】:

    也许你试试这个:How can I reverse a list in python

    您可以使用成员函数镜像中的反向 self.items 列表创建新队列。

    【讨论】:

      【解决方案3】:
      q = ArrayQueue()
      
      def mirror(q):
      copy = ArrayQueue()
      stack = ArrayStack()
      
      while not q.is_empty():
          stack.push(q.first())
          copy.enqueue(q.dequeue())
      
      while not stack.is_empty():
          copy.enqueue(stack.pop())
      
      for i in range(len(copy)):
          print(copy.dequeue(),end=" ")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-09
        • 2012-05-14
        • 2014-05-21
        • 1970-01-01
        • 1970-01-01
        • 2013-02-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多