Queue应用 - Hot Potato

概念介绍

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))
posted @ 2018-10-21 14:29  Jeffrey_Yang  阅读(406)  评论(0编辑  收藏  举报