获取整数队列并制作该元素的副本

时间:2015-01-31 07:00:26

标签: python stack queue

“编写一个名为stutter的函数,它接受一个整数队列作为参数,并用原始队列中该元素的两个副本替换队列的每个元素。”

示例:

q1 = Queue()
queue.enqueue(1)
queue.enqueue(2)
queue.enqueue(3)
stutter(q1)
while not queue.isempty():
    print(queue.dequeue(), end=' ')

应该给出答案为“1 1 2 2 3 3”

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 size(self):
            return len(self.items)

        def check_empty(self):
            if self.items == []:
                return True

def stutter(Q):
    queue=Queue()
    stack = Stack()
    while not queue.isempty():
        stack.push(queue.dequeue())

    while not stack.isempty():
        queue.enqueue(stack.pop())

这是我编写的代码,我可以将其打印一次,只打印一次,我无法按顺序复制和排序。

2 个答案:

答案 0 :(得分:1)

尝试使用此功能(目前无法测试):

def stutter(queue):
    # iterate all items
    for _ in range(queue.size()):
        # store item in local context
        item = queue.dequeue()
        # push two *references* to item into the queue
        queue.enqueue(item)
        queue.enqueue(item)

这将迭代所有项目一次,立即将两个应对程序推到队列的后面。一旦此迭代结束,第一个推送项应该是第一个。

请注意,对象不会重复,并且队列中将有两个对同一对象的引用。

提示: Python中已经有一个队列实现。您可以通过导入queue

来使用它

答案 1 :(得分:0)

In [17]:

def stutter(q):
    for i in range(q.size()):
        elm = q.dequeue()
        q.enqueue(elm)
        q.enqueue(elm)



In [18]:

q1 = Queue()
q1.enqueue(1)
q1.enqueue(2)
q1.enqueue(3)
stutter(q1)
print q1
[3, 3, 2, 2, 1, 1]

注意,我在Queue类中添加了一个 str 方法来查看结果。

class Queue:
        # SAME AS BEFORE
        def __str__(self):
            return str(self.items)

你也可以作弊,因为python没有私有实例变量。我不推荐它作为一种选择。

def stutter(q):
    q.items = sorted([elm for elm in q.items] + [elm for elm in q.items])

如果您想使用所需的输出返回:

q1 = Queue()
q1.enqueue(1)
q1.enqueue(2)
q1.enqueue(3)
stutter(q1)
print(' '.join([str(elm) for elm in q1.items]))
1 1 2 2 3 3