problem-solving-with-algorithms-and-data-structure-usingpython(使用python解决算法和数据结构) -- 基本数据结构 -- 队列

1. 什么是队列?python

队列是项的有序结合,其中添加新项的一端称为队尾,移除项的一端称为队首。ide

FIFO:先进先出spa

2. 队列抽象数据类型code

队列操做以下:blog

Queue() 建立一个空的新队列。 它不须要参数,并返回一个空队列。 enqueue(item) 将新项添加到队尾。 它须要 item 做为参数,并不返回任何内容。 dequeue() 从队首移除项。它不须要参数并返回 item。 队列被修改。 isEmpty() 查看队列是否为空。它不须要参数,并返回布尔值。 size() 返回队列中的项数。它不须要参数,并返回一个整数。

3. python实现队列队列

class Queue: def __init__(self): self.items = [] def isEmpty(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)

4. 模拟:烫手山芋游戏

在这个游戏中,孩子们围成一个圈,并尽量快的将一个山芋递给旁边的孩子。在某一个时间,动做结束,有山芋的孩子从圈中移除。游戏继续开始直到剩下最后一个孩子。
烫手山芋游戏介绍
假设拿着山芋的孩子在队列的前面。当拿到山芋的时候,这个孩子将先出列再入队列,把他放在队列的最后。通过 num 次的出队入队后,前面的孩子将被永久移除队列。而且另外一个周期开始,继续此过程,直到只剩下一个名字(队列的大小为 1)。
from pythonds.basic.queue import Queue def hotPotato(nameList,num): simqueue = Queue() for name in nameList: simqueue.enqueue(name) while simqueue.size() > 1: for i in range(num): simqueue.enqueue(simqueue.dequeue()) simqueue.dequeue() return simqueue.dequeue() print(hotPotato(["Bill", "David", "Susan", "Jane", "Kent", "Brad"], 7))

 

相关文章
相关标签/搜索