Python实现的数据结构与算法之队列详解


Posted in Python onApril 22, 2015

本文实例讲述了Python实现的数据结构与算法之队列。分享给大家供大家参考。具体分析如下:

一、概述

队列(Queue)是一种先进先出(FIFO)的线性数据结构,插入操作在队尾(rear)进行,删除操作在队首(front)进行。

二、ADT

队列ADT(抽象数据类型)一般提供以下接口:

① Queue() 创建队列
② enqueue(item) 向队尾插入项
③ dequeue() 返回队首的项,并从队列中删除该项
④ empty() 判断队列是否为空
⑤ size() 返回队列中项的个数

队列操作的示意图如下:

Python实现的数据结构与算法之队列详解

三、Python实现

使用Python的内建类型list列表,可以很方便地实现队列ADT:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
class Queue:
  def __init__(self):
    self.items = []
  def enqueue(self, item):
    self.items.append(item)
  def dequeue(self):
    return self.items.pop(0)
  def empty(self):
    return self.size() == 0
  def size(self):
    return len(self.items)

四、应用

著名的 约瑟夫斯问题(Josephus Problem)是应用队列(确切地说,是循环队列)的典型案例。在 约瑟夫斯问题 中,参与者围成一个圆圈,从某个人(队首)开始报数,报数到n+1的人退出圆圈,然后从退出人的下一位重新开始报数;重复以上动作,直到只剩下一个人为止。

值得注意的是,Queue类只实现了简单队列,上述问题实际上需要用循环队列来解决。在报数过程中,通过“将(从队首)出队的人再入队(到队尾)”来模拟循环队列的行为。具体代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
def josephus(namelist, num):
  simqueue = Queue()
  for name in namelist:
    simqueue.enqueue(name)
  while simqueue.size() > 1:
    for i in xrange(num):
      simqueue.enqueue(simqueue.dequeue())
    simqueue.dequeue()
  return simqueue.dequeue()
if __name__ == '__main__':
  print(josephus(["Bill", "David", "Kent", "Jane", "Susan", "Brad"], 3))

运行结果:

$ python josephus.py
Susan

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
python求crc32值的方法
Oct 05 Python
Python urllib、urllib2、httplib抓取网页代码实例
May 09 Python
在Django的form中使用CSS进行设计的方法
Jul 18 Python
使用Python编写简单的端口扫描器的实例分享
Dec 18 Python
python3中set(集合)的语法总结分享
Mar 24 Python
python leetcode 字符串相乘实例详解
Sep 03 Python
Python数据集切分实例
Dec 08 Python
Python数据可视化教程之Matplotlib实现各种图表实例
Jan 13 Python
python自动发送测试报告邮件功能的实现
Jan 22 Python
Python之lambda匿名函数及map和filter的用法
Mar 05 Python
python+numpy实现的基本矩阵操作示例
Jul 19 Python
python Polars库的使用简介
Apr 21 Python
详尽讲述用Python的Django框架测试驱动开发的教程
Apr 22 #Python
Hadoop中的Python框架的使用指南
Apr 22 #Python
Python实现提取文章摘要的方法
Apr 21 #Python
python中map、any、all函数用法分析
Apr 21 #Python
用于统计项目中代码总行数的Python脚本分享
Apr 21 #Python
Python中实现参数类型检查的简单方法
Apr 21 #Python
python实现的jpg格式图片修复代码
Apr 21 #Python
You might like
PHP生成HTML静态页面实例代码
2008/08/31 PHP
PhpDocumentor 2安装以及生成API文档的方法
2014/05/21 PHP
php按字符无乱码截取中文的方法
2015/03/27 PHP
基础的WordPress插件制作教程
2015/11/24 PHP
学习JS面向对象成果 借国庆发布个最新作品与大家交流
2009/10/03 Javascript
javascript日期转换 时间戳转日期格式
2011/11/05 Javascript
基于JavaScript实现继承机制之调用call()与apply()的方法详解
2013/05/07 Javascript
jQuery实现的超简单点赞效果实例分析
2015/12/31 Javascript
webpack入门+react环境配置
2017/02/08 Javascript
JavaScript字符串检索字符的方法
2017/06/23 Javascript
JavaScript实现修改伪类样式
2017/11/27 Javascript
vue2.0 可折叠列表 v-for循环展示的实例
2018/09/07 Javascript
vue 使用html2canvas将DOM转化为图片的方法
2018/09/11 Javascript
js实现的在本地预览图片功能示例
2019/11/09 Javascript
javascript实现画板功能
2020/04/12 Javascript
Vue移动端项目实现使用手机预览调试操作
2020/07/18 Javascript
Vue this.$router.push(参数)实现页面跳转操作
2020/09/09 Javascript
关于小程序优化的一些建议(小结)
2020/12/10 Javascript
详解Python中的array数组模块相关使用
2016/07/05 Python
python实现狄克斯特拉算法
2019/01/17 Python
Python学习笔记之抓取某只基金历史净值数据实战案例
2019/06/03 Python
Python generator生成器和yield表达式详解
2019/08/08 Python
基于python的BP神经网络及异或实现过程解析
2019/09/30 Python
PyCharm 在Windows的有用快捷键详解
2020/04/07 Python
Selenium元素定位的30种方式(史上最全)
2020/05/11 Python
基于Tensorflow一维卷积用法详解
2020/05/22 Python
Python3与fastdfs分布式文件系统如何实现交互
2020/06/23 Python
Emporio Armani腕表天猫官方旗舰店:乔治·阿玛尼为年轻人设计的副线品牌
2017/07/02 全球购物
教师评优事迹材料
2014/01/10 职场文书
大学生旷课检讨书
2014/01/22 职场文书
2014年纪检监察工作总结
2014/11/11 职场文书
2014年保密工作总结
2014/11/22 职场文书
大学生毕业个人总结
2015/02/15 职场文书
2015年为民办实事工作总结
2015/05/26 职场文书
工作简报格式范文
2015/07/21 职场文书
2016年校长新年寄语
2015/08/17 职场文书