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抓取京东价格分析京东商品价格走势
Jan 09 Python
Python实现获取域名所用服务器的真实IP
Oct 25 Python
Python插件virtualenv搭建虚拟环境
Nov 20 Python
python实现windows下文件备份脚本
May 27 Python
对numpy数据写入文件的方法讲解
Jul 09 Python
Python爬虫PyQuery库基本用法入门教程
Aug 04 Python
详解Django的CSRF认证实现
Oct 09 Python
python如何实现代码检查
Jun 28 Python
Python math库 ln(x)运算的实现及原理
Jul 17 Python
python如何统计代码运行的时长
Jul 24 Python
python3.6 tkinter实现屏保小程序
Jul 30 Python
详解Django的MVT设计模式
Apr 29 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
桌面中心(三)修改数据库
2006/10/09 PHP
PHP 在线翻译函数代码
2009/05/07 PHP
windows下配置php5.5开发环境及开发扩展
2014/12/25 PHP
php socket通信简单实现
2016/11/18 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
在JavaScript中用getMinutes()方法返回指定的分时刻
2015/06/10 Javascript
JavaScript检测上传文件大小的方法
2015/07/22 Javascript
基于jquery实现表格无刷新分页
2016/01/07 Javascript
Js实现简单的小球运动特效
2016/02/18 Javascript
用js读写cookie的简单方法(推荐)
2016/08/08 Javascript
JS生成一维码(条形码)功能示例
2017/01/19 Javascript
纯js的右下角弹窗实例
2017/03/12 Javascript
微信小程序Redux绑定实例详解
2017/06/07 Javascript
深入理解react 组件类型及使用场景
2019/03/07 Javascript
深入了解JavaScript代码覆盖
2019/06/13 Javascript
python字符串对其居中显示的方法
2015/07/11 Python
python自动重试第三方包retrying模块的方法
2018/04/24 Python
Python之批量创建文件的实例讲解
2018/05/10 Python
python读写LMDB文件的方法
2018/07/02 Python
Python实现按逗号分隔列表的方法
2018/10/23 Python
python 实现对文件夹中的图像连续重命名方法
2018/10/25 Python
Python使用lambda表达式对字典排序操作示例
2019/07/25 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例
2020/03/06 Python
Win10下用Anaconda安装TensorFlow(图文教程)
2020/06/18 Python
韩国CJ食品专卖网:CJonmart
2016/09/11 全球购物
工商管理系学生的自我评价分享
2013/11/29 职场文书
生物科学系大学生的自我评价
2013/12/20 职场文书
年终考核评语
2014/01/19 职场文书
乡镇安全生产目标责任书
2014/07/23 职场文书
师德师风自我剖析材料
2014/09/27 职场文书
股东授权委托书
2014/10/15 职场文书
党员群众路线学习心得体会
2014/11/04 职场文书
毕业论文答辩开场白
2015/05/27 职场文书
羊脂球读书笔记
2015/06/30 职场文书
Redis主从配置和底层实现原理解析(实战记录)
2021/06/30 Redis
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
2022/04/13 Java/Android