热土豆问题

#队列学习#

今天我们学习到了队列(Queue)这个抽象数据结构。

与栈(stack)不同的是,它是先进先出原则或者也可以说成为(FIFO)

所以我们先来看看在python中如何实现queue这一抽象数据类型

首先,我先放出队列(Queue)的实现源码

首先我们在def __init__(self): 在这里先创建一个空列表,以它来实现队列的功能

第二行:判断队列是否为空队列

第三行:enqueue()---将元素加入到对尾

第四行:dequeue()----将在队首的元素输出来

tips:在栈中,栈顶栈首的规定不好时是会影响到时间复杂度的,但是在队列中不会出现这种情况

在这里我们规定以列表的表头为对尾,以表尾为对首

第五行:计算出该队列的长度

这便完成了队列的基本结构,以及每个功能的了解。

接下来来到hotpotato问题

原理:利用队列的用法的一个典型的方法,模拟需要FIFO方式管理数据的真实场景,传土豆问题便是如此。

接下来,我会将每一个code进行解析。

所以别走神,看好。

第一步:先命名一个叫hotpotato的函数,然后在函数内创建一个空列队。

这个空列队在后面将会被用来进行暂存游戏人员(namelist)

第二步:我们来分解来看。

1.对于for name in namelist:sumqueue.enqueue(name)此操作

在此处是为了将在namelist中的元素全部放入队列之中

2.为何要判断该队列的大小,是为以while循环不停循环直到队列中只剩下最后一个人,结束循环,就是游戏结束,最后一个人胜出。

3。for i in range(num)-----num是土豆传递的次数,也就是说接下来的出队入队操作要不断执行num次

sumqueue.enqueue(sumqueue.dequeue())----是为让队列形成一个循环

4为何在while循环下还写一段sumqueue.dequeue()是当for循环结束后,将经历num次的队首的值移除队列,让新的队列继续执行while循环,直到队列中的大小为1的时候结束。

5.最后返回赢家。

在这个土豆传递问题中,我们可以发现它很好地利用了队列的性质FIFO。

希望这个bolg可以更好地帮你认识到队列,谢谢.

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值