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 相关文章推荐
win7安装python生成随机数代码分享
Dec 27 Python
Python中获取网页状态码的两个方法
Nov 03 Python
Python使用ftplib实现简易FTP客户端的方法
Jun 03 Python
Python的for和break循环结构中使用else语句的技巧
May 24 Python
Python编程之event对象的用法实例分析
Mar 23 Python
Python使用mongodb保存爬取豆瓣电影的数据过程解析
Aug 14 Python
python爬虫豆瓣网的模拟登录实现
Aug 21 Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
Oct 17 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
Jun 08 Python
Python字符串函数strip()原理及用法详解
Jul 23 Python
python3 os进行嵌套操作的实例讲解
Nov 19 Python
python脚本定时发送邮件
Dec 22 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编写PDF文档生成器
2006/10/09 PHP
使用新浪微博API的OAuth认证发布微博实例
2015/03/27 PHP
php htmlentities()函数的定义和用法
2016/05/13 PHP
PHP读取文件,解决中文乱码UTF-8的方法分析
2020/01/22 PHP
JavaScript 关键字屏蔽实现函数
2009/08/02 Javascript
jQuery 使用手册(五)
2009/09/23 Javascript
jQuery动态添加的元素绑定事件处理函数代码
2011/08/02 Javascript
javaScript实现浮点数转十六进制字符
2013/10/29 Javascript
JavaScript中String.match()方法的使用详解
2015/06/06 Javascript
js验证身份证号有效性并提示对应信息
2015/10/19 Javascript
javascript DIV实现跟随鼠标移动
2020/03/19 Javascript
js操作XML文件的实现方法兼容IE与FireFox
2016/06/25 Javascript
nodeJs内存泄漏问题详解
2016/09/05 NodeJs
bootstrap多种样式进度条展示
2016/12/20 Javascript
vue-cli常用设置总结
2018/02/24 Javascript
学习jQuery中的noConflict()用法
2018/09/28 jQuery
js for终止循环 跳出多层循环
2018/10/04 Javascript
浅谈React Native 传参的几种方式(小结)
2019/05/21 Javascript
ES6基础之 Promise 对象用法实例详解
2019/08/22 Javascript
React+Redux实现简单的待办事项列表ToDoList
2019/09/29 Javascript
如何阻止移动端浏览器点击图片浏览
2020/08/29 Javascript
[02:23]1个至宝=115个英雄特效 最“绿”至宝拉比克“魔导师密钥”登场
2018/12/29 DOTA
python里对list中的整数求平均并排序
2014/09/12 Python
Python在Windows和在Linux下调用动态链接库的教程
2015/08/18 Python
详解appium+python 启动一个app步骤
2017/12/20 Python
DES加密解密算法之python实现版(图文并茂)
2018/12/06 Python
Python中Flask-RESTful编写API接口(小白入门)
2019/12/11 Python
美国生鲜及杂货电商:FreshDirect
2018/01/29 全球购物
Myprotein亚太地区:欧洲第一在线运动营养品牌
2020/12/20 全球购物
儿子婚宴答谢词
2014/01/09 职场文书
《猴子种树》教学反思
2014/02/14 职场文书
化学工程专业求职信
2014/08/10 职场文书
群众路线教育查摆剖析材料
2014/10/10 职场文书
工作能力自我评价2015
2015/03/05 职场文书
MySQL下使用Inplace和Online方式创建索引的教程
2021/05/26 MySQL
Python可视化神器pyecharts之绘制箱形图
2022/07/07 Python