Python 数据结构之队列的实现


Posted in Python onJanuary 22, 2017

Python 队列

Queue 队列是一种先进先出(FIFO)的数据类型, 新的元素通过 入队 的方式添加进 Queue 的末尾, 出队 就是从 Queue 的头部删除元素.

用列表来做 Queue:

queue = []         # 初始化一个列表数据类型对象, 作为一个队列

def enQ():       # 定义一个入栈方法
  queue.append(raw_input('Enter New String: ').strip())   
  # 提示输入一个入队的 String 对象, 调用 Str.strip() 保证输入的 String 值不包含多余的空格

def deQ():        # 定义一个出队方法
  if len(queue) == 0:
    print "Cannot pop from an empty queue!"
  else:
    print 'Remove [', `queue.pop(0)`, ']'
    # 使用反单引号(` `)来代替 repr(), 把 String 的值用引号扩起来, 而不仅显示 String 的值
    # queue.pop(0) 总是将在队列中最前面的元素弹出

def viewQ():      # 定义一个显示队列中的内容的方法
    print queue

CMDs = {'u':enQ, 'o':deQ, 'v':viewQ}
# 定义一个 Dict 类型对象, 将字符映射到相应的 function .可以通过输入字符来执行相应的操作

def showmenu():      # 定义一个操作菜单提示方法
  pr = """
  (E)nqueue
  (D)equeue
  (V)iew
  (Q)uit

  Enter choice: """

  while True:
    while True:
      try:
        choice = raw_input(pr).strip()[0].lower()
        # Str.strip() 去除 String 对象前后的多余空格
        # Str.lower() 将多有输入转化为小写, 便于后期的统一判断
        # 输入 ^D(EOF, 产生一个 EOFError 异常)
        # 输入 ^C(中断退出, 产生一个 keyboardInterrupt 异常)

      except (EOFError, KeyboardInterrupt, IndexError):
        choice = 'q'

      print '\nYou picked: [%s]' % choice

      if choice not in 'uovq':
        print 'Invalid option, try again'
      else:
        break

    if choice == 'q':
      break
    CMDs[choice]()
    # 获取 Dict 中字符对应的 functionName, 实现函数调用

if __name__ == '__main__':
  showmenu()

队列和堆栈的实现方式很相似, 区别在于队列总是先弹出第一个元素而堆栈总是先弹出最后一个元素.

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Python 相关文章推荐
Python实现的ini文件操作类分享
Nov 20 Python
Python守护进程(daemon)代码实例
Mar 06 Python
Python用GET方法上传文件
Mar 10 Python
Python数据分析之真实IP请求Pandas详解
Nov 18 Python
Python在信息学竞赛中的运用及Python的基本用法(详解)
Aug 15 Python
用Python登录好友QQ空间点赞的示例代码
Nov 04 Python
django模板语法学习之include示例详解
Dec 17 Python
简单谈谈python基本数据类型
Sep 26 Python
python输入错误后删除的方法
Oct 12 Python
python画环形图的方法
Mar 25 Python
Django后端分离 使用element-ui文件上传方式
Jul 12 Python
Python面向对象之成员相关知识总结
Jun 24 Python
Python 数据结构之堆栈实例代码
Jan 22 #Python
Python 常用 PEP8 编码规范详解
Jan 22 #Python
python学习之面向对象【入门初级篇】
Jan 21 #Python
Python中struct模块对字节流/二进制流的操作教程
Jan 21 #Python
python使用xlrd与xlwt对excel的读写和格式设定
Jan 21 #Python
Python第三方库xlrd/xlwt的安装与读写Excel表格
Jan 21 #Python
python实现的多线程端口扫描功能示例
Jan 21 #Python
You might like
PHP也可以?成Shell Script
2006/10/09 PHP
php文本转图片自动换行的方法
2013/03/13 PHP
Codeigniter(CI)框架分页函数及相关知识
2014/11/03 PHP
完美实现wordpress禁止文章修订和自动保存的方法
2014/11/03 PHP
PHP中SSO Cookie登录分析和实现
2015/11/06 PHP
PHP搭建大文件切割分块上传功能示例
2017/01/04 PHP
关于jquery ajax 调用带参数的webservice返回XML数据一个小细节
2012/07/31 Javascript
jquery 延迟执行实例介绍
2013/08/20 Javascript
自己动手实现jQuery Callbacks完整功能代码详解
2013/11/25 Javascript
JavaScript中的Math.SQRT1_2属性使用简介
2015/06/14 Javascript
jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
2016/12/24 Javascript
BootStrap Fileinput初始化时的一些参数
2016/12/30 Javascript
微信小程序“摇一摇”的实例代码
2017/07/20 Javascript
利用js将ajax获取到的后台数据动态加载至网页中的方法
2018/08/08 Javascript
解决vue单页面应用进入页面加载所有 js 的问题
2020/08/12 Javascript
利用js实现简易红绿灯
2020/10/15 Javascript
JavaScript中跨域问题的深入理解
2021/03/04 Javascript
[15:58]DOTA2国际邀请赛采访专栏:Tongfu.Sansheng&KingJ,DK.rOtk
2013/08/08 DOTA
python下函数参数的传递(参数带星号的说明)
2010/09/19 Python
python字典多条件排序方法实例
2014/06/30 Python
Python实现爬取知乎神回复简单爬虫代码分享
2015/01/04 Python
Python实现比较扑克牌大小程序代码示例
2017/12/06 Python
python根据list重命名文件夹里的所有文件实例
2018/10/25 Python
python实现图片转字符小工具
2019/04/30 Python
Python中zip()函数的简单用法举例
2019/09/02 Python
Python全局锁中如何合理运用多线程(多进程)
2019/11/06 Python
python中的TCP(传输控制协议)用法实例分析
2019/11/15 Python
在tensorflow中设置使用某一块GPU、多GPU、CPU的操作
2020/02/07 Python
Python类和实例的属性机制原理详解
2020/03/21 Python
Python3爬虫mitmproxy的安装步骤
2020/07/29 Python
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
2020/10/15 Python
css3实现3D色子翻转特效
2014/12/23 HTML / CSS
Clarins娇韵诗美国官网:法国天然护肤品牌
2016/09/26 全球购物
2014校长四风问题对照检查材料思想汇报
2014/09/16 职场文书
赞美教师的句子
2019/09/02 职场文书
Django基础CBV装饰器和中间件
2022/03/22 Python