#队列学习#
今天我们学习到了队列(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可以更好地帮你认识到队列,谢谢.