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中的自定义函数学习笔记
Sep 23 Python
Python实现二叉搜索树
Feb 03 Python
基于使用paramiko执行远程linux主机命令(详解)
Oct 16 Python
浅谈numpy库的常用基本操作方法
Jan 09 Python
在python中实现将一张图片剪切成四份的方法
Dec 05 Python
python给微信好友定时推送消息的示例
Feb 20 Python
Python 实现遥感影像波段组合的示例代码
Aug 04 Python
Python 如何提高元组的可读性
Aug 26 Python
让你的Python代码实现类型提示功能
Nov 19 Python
Python多线程thread及模块使用实例
Apr 28 Python
如何解决cmd运行python提示不是内部命令
Jul 01 Python
pytorch显存一直变大的解决方案
Apr 08 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的优点与缺点
2013/04/11 PHP
PHP+mysql实现从数据库获取下拉树功能示例
2017/01/06 PHP
php和C#的yield迭代器实现方法对比分析
2019/07/17 PHP
document.open() 与 document.write()的区别
2007/08/13 Javascript
nodejs中exports与module.exports的区别详细介绍
2013/01/14 NodeJs
JavaScript在浏览器标题栏上显示当前日期和时间的方法
2015/03/19 Javascript
javascript解决IE6下hover问题的方法
2015/07/28 Javascript
javascript实现输出指定行数正方形图案的方法
2015/08/03 Javascript
jQuery的文档处理程序详解
2016/05/10 Javascript
JavaScript三种绑定事件方式及相互之间的区别分析
2017/01/10 Javascript
jQuery插件HighCharts实现的2D对数饼图效果示例【附demo源码下载】
2017/03/09 Javascript
Vue 2.0 服务端渲染入门介绍
2017/03/29 Javascript
vue之数据交互实例代码
2017/06/20 Javascript
基于vue中keep-alive缓存问题的解决方法
2018/09/21 Javascript
发布Angular应用至生产环境的方法
2018/12/10 Javascript
Jquery遍历筛选数组的几种方法和遍历解析json对象,Map()方法详解以及数组中查询某值是否存在
2019/01/18 jQuery
js基于canvas实现时钟组件
2021/02/07 Javascript
[46:23]OG vs EG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
Python基于pycrypto实现的AES加密和解密算法示例
2018/04/10 Python
Python类中方法getitem和getattr详解
2019/08/30 Python
Python的条件锁与事件共享详解
2019/09/12 Python
HTML5 对各个标签的定义与规定:body的介绍
2012/06/21 HTML / CSS
美国指甲油品牌:Deco Miami
2017/01/30 全球购物
Beauty Expert美国/加拿大:购买奢侈美容产品
2018/12/05 全球购物
英国邮购活的植物主要供应商:Gardening Direct
2019/01/28 全球购物
组织关系转移介绍信
2014/01/16 职场文书
最新创业融资计划书
2014/01/19 职场文书
学位证书委托书
2014/09/30 职场文书
个人四风问题整改措施思想汇报
2014/10/04 职场文书
2015年学习部工作总结范文
2015/03/31 职场文书
大学生就业意向书
2015/05/11 职场文书
社区安置帮教工作总结2015
2015/05/20 职场文书
《艾尔登法环》发布最新「战技」宣传片
2022/04/03 其他游戏
Python 装饰器(decorator)常用的创建方式及解析
2022/04/24 Python