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中的赋值运算符
May 13 Python
python3.5使用tkinter制作记事本
Jun 20 Python
对python3 urllib包与http包的使用详解
May 10 Python
python实现雨滴下落到地面效果
Jun 21 Python
pandas 读取各种格式文件的方法
Jun 22 Python
python实现微信每日一句自动发送给喜欢的人
Apr 29 Python
python如何实现视频转代码视频
Jun 17 Python
python实现的分析并统计nginx日志数据功能示例
Dec 21 Python
python使用Geany编辑器配置方法
Feb 21 Python
Django中的session用法详解
Mar 09 Python
python3将变量输入的简单实例
Aug 19 Python
Python排序算法之插入排序及其优化方案详解
Jun 11 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
百度地图API使用方法详解
2015/08/25 PHP
PHP页面跳转实现延时跳转的方法
2016/12/10 PHP
laravel自定义分页效果
2017/07/23 PHP
Laravel框架表单验证操作实例分析
2019/09/30 PHP
js限制文本框只能输入中文的方法
2015/08/11 Javascript
js实现的奥运倒计时时钟效果代码
2015/12/09 Javascript
Javascript中级语法快速入手
2016/07/30 Javascript
实例解析jQuery工具函数
2016/12/01 Javascript
AngularJS constant和value区别详解
2017/02/28 Javascript
socket.io学习教程之基础介绍(一)
2017/04/29 Javascript
Vue无限滑动周选择日期的组件的示例代码
2018/07/18 Javascript
js屏蔽退格键(backspace或者叫后退键与F5)
2019/02/10 Javascript
vue.js实现数据库的JSON数据输出渲染到html页面功能示例
2019/08/03 Javascript
vue element-ui el-date-picker限制选择时间为当天之前的代码
2019/11/07 Javascript
AutoJs实现刷宝短视频的思路详解
2020/05/22 Javascript
[02:18]《我与DAC》之工作人员:为了热爱DOTA2的玩家们
2018/03/28 DOTA
python算法学习之基数排序实例
2013/12/18 Python
横向对比分析Python解析XML的四种方式
2016/03/30 Python
Python实现树的先序、中序、后序排序算法示例
2017/06/23 Python
Python编程之string相关操作实例详解
2017/07/22 Python
python分治法求二维数组局部峰值方法
2018/04/03 Python
对python 多线程中的守护线程与join的用法详解
2019/02/18 Python
详解Python正则表达式re模块
2019/03/19 Python
python实现大量图片重命名
2020/03/23 Python
Python Django form 组件动态从数据库取choices数据实例
2020/05/19 Python
Python代码覆盖率统计工具coverage.py用法详解
2020/11/25 Python
mui几种页面跳转方式对比总结概括
2017/08/18 HTML / CSS
优衣库澳大利亚官网:UNIQLO澳大利亚
2017/01/18 全球购物
英国和爱尔兰的自炊式豪华度假小屋:Rural Retreats
2018/06/08 全球购物
出纳试用期自我鉴定
2014/04/07 职场文书
新闻发布会策划方案
2014/06/12 职场文书
飞机制造技术专业求职信
2014/07/27 职场文书
生日赠语
2015/06/23 职场文书
《语言的突破》读后感3篇
2019/12/12 职场文书
只需要100行Python代码就可以实现的贪吃蛇小游戏
2021/05/27 Python
TV动画「神渣☆爱豆」公开第一弹主视觉图
2022/03/21 日漫