一、概述

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

二、ADT

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

Queue() 创建队列

enqueue(item) 向队尾插入项

dequeue() 返回队首的项,并从队列中删除该项

empty() 判断队列是否为空

size() 返回队列中项的个数

队列操作的示意图如下:

三、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实现的数据结构与算法:队列相关推荐

  1. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

  2. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  3. 29岁学python的建议_学习Python的建议

    Python是最容易入门的编程语言,没有之一.如果初学者接触的第一门语言是C或者C++,对他们来说最难的不是语法,而是容易出现内存泄漏.指针等问题.有时候排查这些问题对初学者的打击很大,尤其是没掌握排 ...

  4. JavaScript数据结构与算法——队列详解(下)

    接下来会借助本人另一篇文章JavaScript数据结构与算法--队列详解(上)中实现的队列类及其方法实现一个应用. 配对问题 需求分析:在一个文件中保存着一份男女混合的数据,名称前以B开头表示男士,以 ...

  5. 数据结构与算法---队列

    数据结构与算法-队列 1. 队列的定义: 队列(Queue )简称队,是一种操作受限制 的线性表 ,只允许在表的一端进行插入,而在表的另一端进行删除.向队列中插入元素称为入队或进队: 删除元素称为出队 ...

  6. javascript数据结构与算法---队列

    javascript数据结构与算法---队列 队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素.队列用于存储按顺序排列的数据,先进先出,这点和栈不一样(后入先出).在栈中,最后入栈的元素 ...

  7. python线性表和队列_[笔记]python数据结构之线性表:linkedlist链表,stack栈,queue队列...

    python数据结构之线性表 python内置了很多高级数据结构,list,dict,tuple,string,set等,在使用的时候十分舒心.但是,如果从一个初学者的角度利用python学习数据结构 ...

  8. python优先级排序_用Python实现优先级队列的3种方法

    微信公众号:冰咖啡与狗 1. 什么是优先级队列? 优先级队列是一种容器型数据结构,它能管理一队记录,并按照排序字段(例如一个数字类型的权重值)为其排序.由于是排序的,所以在优先级队列中你可以快速获取到 ...

  9. python 网页编程_通过Python编程检索网页

    python 网页编程 The internet and the World Wide Web (WWW), is probably the most prominent source of info ...

  10. python queue 调试_学Python不是盲目的,是有做过功课认真去了解的

    有多少伙伴是因为一句'人生苦短,我用Python'萌生想法学Python的!我跟大家更新过很多Python学习教程普及过多次的Python相关知识,不过大家还是还得计划一下Python学习路线!Pyt ...

最新文章

  1. python转csv_python脚本如何将Excel文件转为csv文件(代码)
  2. 项目经理的超越(三)人际优先,做事上的超越
  3. TCP/IP详解--学习笔记(4)-ICMP协议,ping和Traceroute
  4. uboot启动第一阶段——start.S
  5. 苹果cmsV10高仿草民电影网在线影视网站模板 带手机版
  6. lambda理解与应用
  7. jquery ajax调用服务器端指定的函数的三种方式
  8. Android 数据库综述(二) 程序计算器与信号量来处理多线程并发问题
  9. 微信端修改title
  10. 央行数字货币——DCEP的那些事儿
  11. Data + AI Summit 2022 PPT 下载
  12. Mac配置maven环境变量
  13. ORACLE--面试知识点
  14. Android网络收音机项目
  15. 好看的(动态)Jay迷自制动态专辑卡片(正面和背面不同)和歌词页面
  16. php报错_STORAGE_WRITE_ERROR_:./Application/Runtime/Cache/Admin/df12aa1edf6tt330187a6514aae4fda4.php
  17. 发改委印发《关于促进分享经济发展的指导性意见》
  18. 架构师之路(七)之五视图方法论
  19. 硬盘内部硬件结构和工作原理详解
  20. RabbitMQ 安装教程(CentOS版)

热门文章

  1. Intellij IDEA中Mybatis Mapper自动注入警告的6种解决方案
  2. element-ui简单使用
  3. swiper轮播插件的使用
  4. python3-numpy数组广播 和 np.tile 扩展数组
  5. Java-变量、常量
  6. Android代码混淆方法,Android 代码混淆零基础入门
  7. Python set list dict tuple 区别和相互转换 - Python零基础入门教程
  8. java矩阵面积_Java基础 矩阵面积
  9. 拉普拉斯时域卷积定理_如何证明频域卷积定理
  10. 双百双新产业项目是什么_投资380亿,广西38个“双百双新”产业项目开竣工