在python中镜像队列

时间:2015-05-04 23:28:02

标签: python class stack queue reverse

我需要使用名为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

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

这会奏效。您的队列由列表组成,因此您可以使用列表中的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 :(得分:0)

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=" ")