python数据结构与算法分析 豆瓣,数据结构与算法Python语言实现
本文主要详细介绍Python中的队列。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下,希望能帮到你。
传土豆
一种典型的排队方法是模拟真实场景,其中数据需要由FIFO管理。考虑这个游戏:传递土豆。在这个游戏中,成员们围成一个圈,依次以最快的速度传递一个土豆。到了某个时刻,所有人都停止了传递,手里拿着土豆的成员不得不退出游戏。重复上述过程,直到只剩下一个成员。
我们将实现一个土豆游戏的通用模拟程序。该程序接受一个名单和一个常数num进行计数,并返回最后一个人的名字。
我们用队列来模拟环.也就是说,假设拿着土豆的人在队伍的最前面。在模拟土豆传输的过程中,程序将这个人的名字移出队列,然后立即插入到队列的末尾。然后,这个人将等待,直到他再次到达队列的头部。在num时报的出列和排队之后,排在队伍最前面的人出局了,新一轮的游戏开始了。反复,直到队列中只剩下一个名字(即队列的大小为1)。
班级队列:
def __init__(self):
Self.items=[] #建立一个空队列
def isEmpty(self):
Return.items==[] #判断是否为空。
定义排队(自身,项目):
Self.items.insert(0,item) #在队列末尾(列表的左端)插入一个元素
定义出列(自身):
Return.items.pop () #移出队列头的元素(列表的右端)
定义尺寸(自身):
Len (self.items) #队列(list)长度
def look(自身):
打印(自己的项目)
def transmitPotato(名称列表,编号):
Simqueue=Queue() #创建一个队列
namelist: #中的名称遍历成员名称列表。
Simqueue.enqueue(name) #成员的名称已排队。
而simqueue.size() 1: #在队列元素的数量大于1时循环执行
对于范围内的I(NUM)3360 #循环次数(土豆传递次数)
#成员姓名从队首转换到队尾
sim queue . enqueue(sim queue . dequeue())
#成员的名称已出列(该成员已被清除)
simqueue.dequeue()
Return simqueue.dequeue() #返回队列中剩下的最后一个名字。
调用transmitPotato函数,用7作为计数常量,会得到如下结果:
请注意,在上面的示例中,count常量大于列表中名称的数量。这不会造成问题,因为队列同时模拟了一个环.请注意,当名称列表加载到队列中时,列表中的第一个名称出现在队列的开头。在上面的例子中,小明是列表中的第一个元素,所以他在队列的最前面。
总结
本文到此为止。希望能帮到你,也希望你能多关注更多热门IT软件开发工作室的内容!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。