--- 队列 (Queue) --- 先进先出 (FIFO) 平时可以用 list 来实现 (append & pop),封装成类更严谨
class Queue(object):
def __init__(self):
self.queue = []
def enqueue(self, element):
"""队尾添加数据"""
self.queue.insert(0, element)
def dequeue(self):
"""队首移除数据"""
if not self.is_empty():
return self.queue.pop()
else:
return None
def qsize(self):
return len(self.queue)
def is_empty(self):
return self.qsize() == 0
队列的应用:
热土豆问题 (约瑟夫问题)
def hot_potato(name_list, num):
"""热土豆问题 (约瑟夫问题)"""
q = Queue()
for name in name_list:
q.enqueue(name)
while q.qsize() > 1:
for i in range(num):
# 队首人出队,立刻在队尾入队,即完成一次传递
q.enqueue(q.dequeue())
# 重复 num 次后,队首的人淘汰
q.dequeue()
return q.dequeue()