Python 数据结构之堆栈实例代码


Posted in Python onJanuary 22, 2017

Python 堆栈

堆栈是一个后进先出(LIFO)的数据结构. 堆栈这个数据结构可以用于处理大部分具有后进先出的特性的程序流 .
在堆栈中, push 和 pop 是常用术语:

  • push: 意思是把一个对象入栈.
  • pop: 意思是把一个对象出栈.

下面是一个由 Python 实现的简单的堆栈结构:

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

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

def popit():        # 定义一个出栈方法
  if len(stack) == 0:
    print "Cannot pop from an empty stack!"
  else:
    print 'Remove [', `stack.pop()`, ']'
    # 使用反单引号(` `)来代替 repr(), 把 String 的值用引号扩起来, 而不仅显示 String 的值

def viewstack():      # 定义一个显示堆栈中的内容的方法
    print stack

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

def showmenu():      # 定义一个操作菜单提示方法
  pr = """
  p(U)sh
  p(O)p
  (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()

NOTE: 在堆栈数据结构中, 主要应用了 List 数据类型对象的 容器 和 可变 等特性, 表现在 List.append() 和 List.pop() 这两个列表类型内建函数的调用.

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

Python 相关文章推荐
Python类方法__init__和__del__构造、析构过程分析
Mar 06 Python
python实现在windows服务中新建进程的方法
Jun 30 Python
python装饰器初探(推荐)
Jul 21 Python
wxpython中自定义事件的实现与使用方法分析
Jul 21 Python
python通过opencv实现批量剪切图片
Nov 13 Python
Python实现的生产者、消费者问题完整实例
May 30 Python
python3 读取Excel表格中的数据
Oct 16 Python
把pandas转换int型为str型的方法
Jan 29 Python
python3编写ThinkPHP命令执行Getshell的方法
Feb 26 Python
Python 解码Base64 得到码流格式文本实例
Jan 09 Python
pandas 像SQL一样使用WHERE IN查询条件说明
Jun 05 Python
Python matplotlib读取excel数据并用for循环画多个子图subplot操作
Jul 14 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
Python 字符串大小写转换的简单实例
Jan 21 #Python
You might like
PHP闭包(Closure)使用详解
2013/05/02 PHP
实例介绍PHP的Reflection反射机制
2014/08/05 PHP
thinkphp循环结构用法实例
2014/11/24 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
Js 刷新框架页的代码
2010/04/13 Javascript
三级下拉菜单的js实现代码
2011/05/23 Javascript
js 实现浏览历史记录示例
2014/04/20 Javascript
简介JavaScript中strike()方法的使用
2015/06/08 Javascript
JSON相关知识汇总
2015/07/03 Javascript
javascript获取wx.config内部字段解决微信分享
2016/03/09 Javascript
Three.js学习之网格
2016/08/10 Javascript
EasyUI学习之DataGird分页显示数据
2016/12/29 Javascript
微信小程序实现鼠标拖动效果示例
2017/12/01 Javascript
Angular 组件之间的交互的示例代码
2018/03/24 Javascript
微信小程序自定义底部导航带跳转功能
2018/11/27 Javascript
nodejs图片处理工具gm用法小结
2018/12/12 NodeJs
vue.js引入外部CSS样式和外部JS文件的方法
2019/01/06 Javascript
基于vue开发微信小程序mpvue-docs跳转页面功能
2019/04/10 Javascript
微信小程序websocket实现即时聊天功能
2019/05/21 Javascript
关于Vue中axios的封装实例详解
2019/10/20 Javascript
React中获取数据的3种方法及优缺点
2020/02/18 Javascript
JavaScript进阶(三)闭包原理与用法详解
2020/05/09 Javascript
python实现多线程的两种方式
2016/05/22 Python
node.js获取参数的常用方法(总结)
2017/05/29 Python
Python3实现腾讯云OCR识别
2018/11/27 Python
Python3 无重复字符的最长子串的实现
2019/10/08 Python
python二维键值数组生成转json的例子
2019/12/06 Python
python实现一次性封装多条sql语句(begin end)
2020/06/06 Python
pymongo insert_many 批量插入的实例
2020/12/05 Python
为2021年的第一场雪锦上添花:用matplotlib绘制雪花和雪景
2021/01/05 Python
python中封包建立过程实例
2021/02/18 Python
如何删除一个表里面的重复行
2013/07/13 面试题
关于爱情的广播稿
2014/01/16 职场文书
初中同学聚会感言
2014/02/11 职场文书
活动宣传策划方案
2014/05/23 职场文书
写给老师的感谢信
2015/01/20 职场文书