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处理大数字的方法
May 27 Python
Windows上配置Emacs来开发Python及用Python扩展Emacs
Nov 20 Python
python好玩的项目—色情图片识别代码分享
Nov 07 Python
python实现kMeans算法
Dec 21 Python
PyCharm代码整体缩进,反向缩进的方法
Jun 25 Python
python使用循环打印所有三位数水仙花数的实例
Nov 13 Python
详解Python解决抓取内容乱码问题(decode和encode解码)
Mar 29 Python
Python语言进阶知识点总结
May 28 Python
PyQt5 实现字体大小自适应分辨率的方法
Jun 18 Python
使用keras2.0 将Merge层改为函数式
May 23 Python
使用python修改文件并立即写回到原始位置操作(inplace读写)
Jun 28 Python
python中if嵌套命令实例讲解
Feb 25 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开发过程中常用函数收藏
2009/12/14 PHP
php读取txt文件组成SQL并插入数据库的代码(原创自Zjmainstay)
2012/07/31 PHP
解决File size limit exceeded 错误的方法
2013/06/14 PHP
php文件上传的例子及参数详解
2013/12/12 PHP
php中随机函数mt_rand()与rand()性能对比分析
2014/12/01 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
Javascript异步表单提交,图片上传,兼容异步模拟ajax技术
2010/05/10 Javascript
js继承的实现代码
2010/08/05 Javascript
JavaScript执行效率与性能提升方案
2012/12/21 Javascript
node.js中的buffer.fill方法使用说明
2014/12/14 Javascript
setTimeout内不支持jquery的选择器的解决方案
2015/04/28 Javascript
jQuery DataTables插件自定义Ajax分页实例解析
2020/04/28 Javascript
js 动态添加元素(div、li、img等)及设置属性的方法
2016/07/19 Javascript
Bootstrap 模态框多次显示后台提交多次BUG的解决方法
2017/12/26 Javascript
vue.js,ajax渲染页面的实例
2018/02/11 Javascript
解决vue移动端适配问题
2018/12/12 Javascript
优雅的elementUI table单元格可编辑实现方法详解
2018/12/23 Javascript
vue下使用nginx刷新页面404的问题解决
2019/08/02 Javascript
[31:00]2014 DOTA2华西杯精英邀请赛5 24 NewBee VS iG
2014/05/25 DOTA
[03:10]2014DOTA2 TI马来劲旅Titan首战告捷目标只是8强
2014/07/10 DOTA
Python中shape计算矩阵的方法示例
2017/04/21 Python
Python 用Redis简单实现分布式爬虫的方法
2017/11/23 Python
对Python 数组的切片操作详解
2018/07/02 Python
python 调用有道api接口的方法
2019/01/03 Python
Lombok插件安装(IDEA)及配置jar包使用详解
2020/11/04 Python
赫里福德的一家乡村零售商店:Philip Morris & Son
2017/06/25 全球购物
zooplus波兰:在线宠物店
2019/07/21 全球购物
Silk Therapeutics官网:清洁、抗衰老护肤品
2020/08/12 全球购物
前台接待的工作职责
2013/11/21 职场文书
党员批评与自我批评
2014/02/12 职场文书
《这儿真好》教学反思
2014/02/22 职场文书
优秀的个人求职信范文
2014/05/09 职场文书
大学生见习报告总结
2014/11/04 职场文书
见习报告格式范文
2014/11/08 职场文书
2015年团支部工作总结
2015/04/03 职场文书
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
2022/04/13 Java/Android