“编写一个名为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())
这是我编写的代码,我可以将其打印一次,只打印一次,我无法按顺序复制和排序。
答案 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