python实现队列_用Python实现的数据结构与算法:队列
一、概述
队列(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实现的数据结构与算法:队列相关推荐
- python 时间序列预测_使用Python进行动手时间序列预测
python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...
- python 概率分布模型_使用python的概率模型进行公司估值
python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...
- 29岁学python的建议_学习Python的建议
Python是最容易入门的编程语言,没有之一.如果初学者接触的第一门语言是C或者C++,对他们来说最难的不是语法,而是容易出现内存泄漏.指针等问题.有时候排查这些问题对初学者的打击很大,尤其是没掌握排 ...
- JavaScript数据结构与算法——队列详解(下)
接下来会借助本人另一篇文章JavaScript数据结构与算法--队列详解(上)中实现的队列类及其方法实现一个应用. 配对问题 需求分析:在一个文件中保存着一份男女混合的数据,名称前以B开头表示男士,以 ...
- 数据结构与算法---队列
数据结构与算法-队列 1. 队列的定义: 队列(Queue )简称队,是一种操作受限制 的线性表 ,只允许在表的一端进行插入,而在表的另一端进行删除.向队列中插入元素称为入队或进队: 删除元素称为出队 ...
- javascript数据结构与算法---队列
javascript数据结构与算法---队列 队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素.队列用于存储按顺序排列的数据,先进先出,这点和栈不一样(后入先出).在栈中,最后入栈的元素 ...
- python线性表和队列_[笔记]python数据结构之线性表:linkedlist链表,stack栈,queue队列...
python数据结构之线性表 python内置了很多高级数据结构,list,dict,tuple,string,set等,在使用的时候十分舒心.但是,如果从一个初学者的角度利用python学习数据结构 ...
- python优先级排序_用Python实现优先级队列的3种方法
微信公众号:冰咖啡与狗 1. 什么是优先级队列? 优先级队列是一种容器型数据结构,它能管理一队记录,并按照排序字段(例如一个数字类型的权重值)为其排序.由于是排序的,所以在优先级队列中你可以快速获取到 ...
- python 网页编程_通过Python编程检索网页
python 网页编程 The internet and the World Wide Web (WWW), is probably the most prominent source of info ...
- python queue 调试_学Python不是盲目的,是有做过功课认真去了解的
有多少伙伴是因为一句'人生苦短,我用Python'萌生想法学Python的!我跟大家更新过很多Python学习教程普及过多次的Python相关知识,不过大家还是还得计划一下Python学习路线!Pyt ...
最新文章
- python转csv_python脚本如何将Excel文件转为csv文件(代码)
- 项目经理的超越(三)人际优先,做事上的超越
- TCP/IP详解--学习笔记(4)-ICMP协议,ping和Traceroute
- uboot启动第一阶段——start.S
- 苹果cmsV10高仿草民电影网在线影视网站模板 带手机版
- lambda理解与应用
- jquery ajax调用服务器端指定的函数的三种方式
- Android 数据库综述(二) 程序计算器与信号量来处理多线程并发问题
- 微信端修改title
- 央行数字货币——DCEP的那些事儿
- Data + AI Summit 2022 PPT 下载
- Mac配置maven环境变量
- ORACLE--面试知识点
- Android网络收音机项目
- 好看的(动态)Jay迷自制动态专辑卡片(正面和背面不同)和歌词页面
- php报错_STORAGE_WRITE_ERROR_:./Application/Runtime/Cache/Admin/df12aa1edf6tt330187a6514aae4fda4.php
- 发改委印发《关于促进分享经济发展的指导性意见》
- 架构师之路(七)之五视图方法论
- 硬盘内部硬件结构和工作原理详解
- RabbitMQ 安装教程(CentOS版)
热门文章
- Intellij IDEA中Mybatis Mapper自动注入警告的6种解决方案
- element-ui简单使用
- swiper轮播插件的使用
- python3-numpy数组广播 和 np.tile 扩展数组
- Java-变量、常量
- Android代码混淆方法,Android 代码混淆零基础入门
- Python set list dict tuple 区别和相互转换 - Python零基础入门教程
- java矩阵面积_Java基础 矩阵面积
- 拉普拉斯时域卷积定理_如何证明频域卷积定理
- 双百双新产业项目是什么_投资380亿,广西38个“双百双新”产业项目开竣工