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中MySQLdb模块用法实例
Nov 10 Python
在Python的Django框架中编写错误提示页面
Jul 22 Python
python3音乐播放器简单实现代码
Apr 20 Python
python 容器总结整理
Apr 04 Python
基于python的字节编译详解
Sep 20 Python
PyQt5每天必学之QSplitter实现窗口分隔
Apr 19 Python
pandas 选择某几列的方法
Jul 03 Python
带你认识Django
Jan 15 Python
python将视频转换为全字符视频
Apr 26 Python
python Elasticsearch索引建立和数据的上传详解
Aug 04 Python
Python如何调用外部系统命令
Aug 07 Python
Python图像读写方法对比
Nov 16 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之提取多维数组指定列的方法
2017/01/03 PHP
php实现页面纯静态的实例代码
2017/06/21 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
JS实现浏览器菜单命令
2006/09/05 Javascript
通过ifame指向的页面高度调整iframe的高度
2006/10/05 Javascript
extJs 文本框后面加上说明文字+下拉列表选中值后触发事件
2009/11/27 Javascript
Flexigrid在IE下不显示数据的有效处理方法
2014/09/04 Javascript
简介JavaScript中的sub()方法的使用
2015/06/08 Javascript
Jquery实现弹性滑块滑动选择数值插件
2015/08/08 Javascript
JavaScript、jQuery与Ajax的关系
2016/01/24 Javascript
基于jquery编写的放大镜插件
2016/03/23 Javascript
JavaScript事件代理和委托详解
2016/04/08 Javascript
jQuery实现别踩白块儿网页版小游戏
2017/01/18 Javascript
angularJS+requireJS实现controller及directive的按需加载示例
2017/02/20 Javascript
js设置随机切换背景图片的简单实例
2017/11/12 Javascript
vue单页开发父子组件传值思路详解
2018/05/18 Javascript
Vue-Router基础学习笔记(小结)
2018/10/15 Javascript
JavaScript栈和队列相关操作与实现方法详解
2018/12/07 Javascript
JavaScript学习笔记之DOM基础操作实例小结
2019/01/09 Javascript
详解微信小程序-canvas绘制文字实现自动换行
2019/04/26 Javascript
Electron实现应用打包、自动升级过程解析
2020/07/07 Javascript
[02:08]什么藏在DOTA2 TI9“小紫本”里?斧王历险记告诉你!
2019/05/17 DOTA
关于python的bottle框架跨域请求报错问题的处理方法
2017/03/19 Python
Windows下Anaconda安装、换源与更新的方法
2020/04/17 Python
python IP地址转整数
2020/11/20 Python
美国特价机票专家:Airfarewatchdog
2018/01/24 全球购物
美国全球旅游运营商:Pacific Holidays
2018/06/18 全球购物
关于母亲节的感言
2014/02/04 职场文书
端午节活动策划方案
2014/03/09 职场文书
大学生社会实践评语
2014/04/25 职场文书
领导四风问题整改措施思想汇报
2014/10/13 职场文书
合作协议书范本
2014/10/25 职场文书
优秀团员主要事迹范文
2015/11/05 职场文书
深入浅析React中diff算法
2021/05/19 Javascript
怎么用Python识别手势数字
2021/06/07 Python