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正则表达式教程之二:捕获篇
Mar 02 Python
Python实现针对含中文字符串的截取功能示例
Sep 22 Python
python3使用requests模块爬取页面内容的实战演练
Sep 25 Python
python中文乱码不着急,先看懂字节和字符
Dec 20 Python
VSCode下好用的Python插件及配置
Apr 06 Python
使用python3构建文件传输的方法
Feb 13 Python
对Python3 解析html的几种操作方式小结
Feb 16 Python
详解python持久化文件读写
Apr 06 Python
python 日期排序的实例代码
Jul 11 Python
python opencv将表格图片按照表格框线分割和识别
Oct 30 Python
python如何爬取动态网站
Sep 09 Python
Python读写yaml文件
Mar 20 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结合jQuery插件ajaxFileUpload实现异步上传文件实例
2020/08/17 PHP
php的debug相关函数用法示例
2016/07/11 PHP
获取任意Html元素与body之间的偏移距离 offsetTop、offsetLeft (For:IE5+ FF1 )[
2006/12/22 Javascript
jquery刷新页面的实现代码(局部及全页面刷新)
2011/07/11 Javascript
Javascript面向对象扩展库代码分享
2012/03/27 Javascript
js取消单选按钮选中示例代码
2013/11/14 Javascript
关于Javascript加载执行优化的研究报告
2014/12/16 Javascript
JavaScript中的console.trace()函数介绍
2014/12/29 Javascript
js实现点击链接后延迟3秒再跳转的方法
2015/06/05 Javascript
jQuery实现大转盘抽奖活动仿QQ音乐代码分享
2015/08/21 Javascript
JS实现队列与堆栈的方法
2016/04/21 Javascript
javascript正则表达式之分组概念与用法实例
2016/06/16 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
2016/07/22 Javascript
详解node.js平台下Express的session与cookie模块包的配置
2017/04/26 Javascript
Vue隐藏显示、只读实例代码
2018/07/18 Javascript
element-ui循环显示radio控件信息的方法
2018/08/24 Javascript
webpack的CSS加载器的使用
2018/09/11 Javascript
jQuery实现input输入框获取焦点与失去焦点时提示的消失与显示功能示例
2019/05/27 jQuery
webpack3升级到webpack4遇到问题总结
2019/09/30 Javascript
前端vue+elementUI如何实现记住密码功能
2020/09/20 Javascript
小程序中手机号识别的示例
2020/12/14 Javascript
[01:03]悬念揭晓 11月26日DOTA2完美盛典不见不散
2017/11/23 DOTA
PyChar学习教程之自定义文件与代码模板详解
2017/07/17 Python
pygame游戏之旅 python和pygame安装教程
2018/11/20 Python
celery4+django2定时任务的实现代码
2018/12/23 Python
python去重,一个由dict组成的list的去重示例
2019/01/21 Python
python实现复制大量文件功能
2019/08/31 Python
python实现小世界网络生成
2019/11/21 Python
python游戏开发的五个案例分享
2020/03/09 Python
浅谈keras中的目标函数和优化函数MSE用法
2020/06/10 Python
用opencv给图片换背景色的示例代码
2020/07/08 Python
Python爬虫实现自动登录、签到功能的代码
2020/08/20 Python
远程学习的教学用品和家庭学习资源:Really Good Stuff
2020/04/27 全球购物
浪费资源的建议书
2014/03/12 职场文书
领导班子个人对照检查剖析材料
2014/09/29 职场文书
MySQL 角色(role)功能介绍
2021/04/24 MySQL