您的位置:首页 > 编程语言 > Python开发

Python之队列模拟算法(烫手山芋问题)

2019-04-15 11:30 281 查看

烫手山芋即击鼓传花,7人传山芋,叫到7的人退出,直到最后一人。

完整代码:

# 自定义队列类
class Queue(object):
def __init__(self):						#初始化空队列
self.items = []

def isEmpty(self):						#是否为空
return self.items == []

def enqueue(self, item):				#入队,索引为0,即队尾在左侧
self.items.insert(0,item)

def dequeue(self):						#出队,列表最后一个,即队首在右侧
return self.items.pop()

def size(self):							#查看队列的大小
return len(self.items)

# 烫手山芋函数
def hotPotato(name, num):
queue = Queue()
#队列为["Brad","Kent","Jane","Susan","David","Bill"]
[queue.enqueue(i) for i in name]        #全部入队后队列中顺序与name_list完全相反
while queue.size() > 1:                 #队列中超过1人,则继续淘汰
[queue.enqueue(queue.dequeue()) for n in range(1, num)] #说1-6的人都排到队尾
queue.dequeue()                     #说7的人出队淘汰,继续循环
return queue.dequeue()                  #出队,最后一人

name_list = ["Bill","David","Susan","Jane","Kent","Brad"]
print(hotPotato(name_list,7))

结果为:

Kent
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: