前提条件:队列的实现:

class Queue:def __init__(self):self.items = []def isEmpty(self):return self.item == []def enqueue(self,item):self.items.append(item)def dequeue(self):self.items.pop(0)def size(self):return len(self.items)

考虑下面的问题:

Bill David Susan Jane Kent Brad 六个人,按照这样的顺序,传递一个土豆并报数,当遇到某个数字时,这个人就要退出游戏,假定我们遇到的退出数字为7,请问在这个位置的条件下,谁能留到最后呢?(Bill从0开始报数)

可以用队列来解决这个问题,这几个人“排队”就类似于队列的一种组合。先来看第一次传土豆的顺序,土豆用P表示,把带土豆的那个人看作队首,如:

Bill(P) David Susan Jane Kent Brad
David(P) Susan Jane Kent Brad Bill

发现在这里这几个人的排队方式类似于一个环状的结构,上次的队首会在下次变成队伍末尾的元素,所以我们不妨在处理的过程中把队首的元素弹出,再把弹出的元素添加到末尾,这是最关键的一步。

所以整体的分析如下:

首先,定义一个队列,让人按照顺序入队,其代码段如:

def hotPotato(namelist,num):s = Queue()i=1for name in namelist:s.enqueue(name)

然后,开始传土豆的模拟部分,只要队伍不为空,我们就可以把队伍中队首的元素弹出,从上面的叙述可以看出,从现在手里拿土豆的人的角度来看,这个人在队伍的末尾,添加到末尾去。

    while s.size()>1:for i in range(num):s.enqueue(s.dequeue())

这个循环的过程类似于报数的过程,Bill报0,报完之后被扔到末尾去,接着David报1,Susan报2,即循环的i就是每个人报的数,我们在这里以题目中的7为例,i的取值有0,1,2,3,4,5,6七个,也就是说,循环停止后,整个队列的头部就是要退出游戏的人,因而在退出循环后,我们要请队首的人出队,其代码如:(注意要和前面的循环对齐)

        s.dequeue()

接下来,循环一直运行,直到整个队伍里只剩下最后一个人,因此我们这个函数只需要返回最后一个人的名字就可以了,如:

    return s.dequeue()

把上面的代码组合起来,就是我们整个的传土豆的函数。

Python 队列之传土豆(《Python数据结构与算法分析》第二版)相关推荐

  1. python第三方库文件传输_本地 Python 代码上传到 Python 第三方库(Pypi)

    程序员对于编程都有自己的"套路",好的套路都会得到复用和 IT 界的传播.这时有一个疑问,怎样来实现呢?小编这里就准备介绍如何将自己写的 Python 包上传到 Python 官网 ...

  2. 《Java程序设计与数据结构教程(第二版)》学习指导

    <Java程序设计与数据结构教程(第二版)>学习指导 目录 图书简况 学习指导 第一章 绪论 第二章 数据和表达式 第三章 使用类和对象 第四章 条件和循环 第五章 编写类 第六章 图形用 ...

  3. 数据结构(C语言)第二版 第一章课后答案

    数据结构(C语言)第二版 第一章课后答案 这本书,我以后也会用,所以趁着考完试做个整理,顺便分享出来.电子资源发不出来,放评论区吧,有需要自取. 1. 简述下列概念:数据.数据元素.数据项.数据对象. ...

  4. 数据结构(C语言)第二版 第三章课后答案

    数据结构(C语言)第二版 第三章课后答案 1~5 C C D A A 6~10 D A B C D 11~15 D D B C B 1.选择题 (1)若让元素1, 2, 3 , 4, 5 依次进栈,则 ...

  5. 数据结构(C语言)第二版 第五章课后答案

    数据结构(C语言)第二版 第五章课后答案 1~5 A D D C A 6~10 C C B D C 11~15 B C A C A 1.选择题 (1)把一棵树转换为二叉树后,这棵二叉树的形态是(A) ...

  6. 数据结构(C语言)第二版 第六章课后答案

    数据结构(C语言)第二版 第六章课后答案 1~5 C B B B C 6~10 B A B A A 11~15 D C C (D,D) B 1.选择题 (1)在一个图中,所有顶点的度数之和等于图的边数 ...

  7. 数据结构(C语言)第二版 第四章课后答案

    数据结构(C语言)第二版 第四章课后答案 1~5 B B C A B 6~10 B B C B B 11~15 A B D (C,B) C 1.选择题 (1)串是一种特殊的线性表,其特殊性体现在(B) ...

  8. python 文件上传下载,python实现上传下载文件功能

    最近刚学python,遇到上传下载文件功能需求,记录下! django web项目,前端上传控件用的是uploadify. 文件上传 - 后台view 的 Python代码如下: @csrf_exem ...

  9. 数据结构(C语言第二版)严蔚敏编,数据结构电子教材,线性表,栈,队列,顺序存储结构,初始化,入栈,出栈,入队,出队,c++

    前言 提示:本篇文章收录严蔚敏编写的数据结构C语言版本 简单介绍一下顺序表,顺序栈,循环队列,的顺序存储结构之间的区别 代码参考严蔚敏编写的<数据结构>,二维码动态演示可扫码可观看. - ...

最新文章

  1. 翡润年华-毛货展示003
  2. OpenStack社区正式接受UnitedStack有云Steth项目
  3. 2.3.2 Batch Norm介绍
  4. c++STL容器的Map和multimap
  5. 确诊新冠小米员工的活动轨迹,这就是人间真实吗?
  6. jQuery源码研究学习笔记(二)
  7. Docker的使用、底层原理及常用软件docker下载
  8. (53)FPGA面试题-利用任务task实现单字节乘法功能(Verilog语言实现)
  9. Java-Arrays数组操作
  10. 走进C++程序世界-----函数相关(全局变量)
  11. Spark部署模式入门
  12. hutool 读取扩展名文件_如何快速的搜索文件,Everything使用技巧
  13. java helloworld源代码_Java Hello World源代码剖析
  14. 修改文件 火车票买下铺_12306修改代码买下铺?12306码农太弱了吧 (转载)
  15. Anaconda完全卸载教程(Windows10系统)
  16. C# Hprose轻量级、跨语言、跨平台的面向对象的高性能远程动态通讯中间件
  17. php树递归算法,PHP二叉树递归算法
  18. 稳定排序与不稳定排序
  19. NBA球队也使用Salesforce?
  20. 蓝桥杯试题 基础练习 十六进制转八进制

热门文章

  1. 35岁的leader,毅然放弃工作8年的地方,也许35岁才是新的起点吧
  2. 简单配置让您的无线小路由变成无线交换机
  3. BPF学习笔记(五)--Systemtap BPF/BCC bpftrace 实践对比
  4. 工信部网站备案系统升级完成 新增备案用户激增
  5. 开启云中办公新时代 联想企业网盘发布最美团队计划
  6. ​docker容器加速
  7. cropper(图片裁剪插件)
  8. 三极管常用封装的引脚排列
  9. 51c语言延时作用,51单片机C语言延时函数怎么定义和使用
  10. 中国移动手机邮箱测试将扩展至北京用户