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实现堆栈与队列的方法
Jan 15 Python
pygame学习笔记(2):画点的三种方法和动画实例
Apr 15 Python
django之session与分页(实例讲解)
Nov 13 Python
python 获取微信好友列表的方法(微信web)
Feb 21 Python
Pandas 缺失数据处理的实现
Nov 04 Python
DataFrame.to_excel多次写入不同Sheet的实例
Dec 02 Python
利用pandas向一个csv文件追加写入数据的实现示例
Apr 23 Python
pyecharts在数据可视化中的应用详解
Jun 08 Python
PyTorch的torch.cat用法
Jun 28 Python
python如何对链表操作
Oct 10 Python
基于Python模拟浏览器发送http请求
Nov 06 Python
python 爬取哔哩哔哩up主信息和投稿视频
Jun 07 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
一个查看session内容的函数
2006/10/09 PHP
谈谈新手如何学习PHP 默默经典版本
2009/08/04 PHP
PHP+Mysql+jQuery实现动态展示信息
2011/10/08 PHP
PHP使用fopen与file_get_contents读取文件实例分享
2016/03/04 PHP
PHP怎样用正则抓取页面中的网址
2016/08/09 PHP
PHP编程中的Session阻塞问题与解决方法分析
2017/08/07 PHP
JavaScript打印网页指定区域的例子
2014/05/03 Javascript
jQuery轮播图效果精简版完整示例
2016/09/04 Javascript
jquery实现轮播图效果
2017/02/13 Javascript
详解vue-resource promise兼容性问题
2017/06/20 Javascript
微信小程序图片自适应支持多图实例详解
2017/06/21 Javascript
详解创建自定义的Angular Schematics
2018/06/06 Javascript
vue和H5 draggable实现拖拽并替换效果
2020/07/29 Javascript
解决vue动态下拉菜单 有数据未反应的问题
2020/08/06 Javascript
nuxt 实现在其它js文件中使用store的方式
2020/11/05 Javascript
在Python的Django框架中包装视图函数
2015/07/20 Python
Python 用Redis简单实现分布式爬虫的方法
2017/11/23 Python
python使用Matplotlib画饼图
2018/09/25 Python
python 利用文件锁单例执行脚本的方法
2019/02/19 Python
浅谈对pytroch中torch.autograd.backward的思考
2019/12/27 Python
python关于变量名的基础知识点
2020/03/03 Python
Python3实现个位数字和十位数字对调, 其乘积不变
2020/05/03 Python
python 带时区的日期格式化操作
2020/10/23 Python
numpy实现RNN原理实现
2021/03/02 Python
家用个人磨皮机:Trophy Skin
2017/03/30 全球购物
会计学个人自荐信模板
2013/12/13 职场文书
土木工程专业个人求职信
2013/12/30 职场文书
学生出入校管理制度
2014/01/16 职场文书
法律进学校实施方案
2014/03/15 职场文书
新品发布会策划方案
2014/06/08 职场文书
邮政竞聘演讲稿
2014/09/03 职场文书
迎七一演讲稿
2014/09/12 职场文书
医药公司采购员岗位职责
2015/04/03 职场文书
观看《筑梦中国》纪录片心得体会
2016/01/18 职场文书
用Python的绘图库(matplotlib)绘制小波能量谱
2021/04/17 Python
详解TypeScript中的类型保护
2021/04/29 Javascript