概念介绍
Queue队列这种数据结构和Stack都是线性结构,但其主要区别是Stack为LIFO,而Queue为FIFO。以List作为来构造Queue,则每当有新的元素进入队列时,将其插入到index为0的位置。
# Completed implementation of a queue ADT
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)
Hot Potato就是一个经典的应用Queue思想的游戏:想象几个儿童围成一圈,以尽可能快的速度传递一个物品,游戏随机暂停时,拥有这个物品的小孩从圈中移除。游戏继续按照这种方式进行,直到省下最后一个孩子。
import Queue
def hot_potato(name_list, num):
sim_queue = Queue()
for name in name_list:
sim_queue.enqueue(name)
while sim_queue.size() > 1:
for i in range(num):
sim_queue.enqueue(sim_queue.dequeue())
sim_queue.dequeue()
return sim_queue.dequeue()
print(hot_potato(["Bill", "David", "Susan", "Jane", "Kent", "Brad"], 7))