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将html转成PDF的实现代码(包含中文)
Mar 04 Python
python实现电子词典
Apr 23 Python
Python标准库os.path包、glob包使用实例
Nov 25 Python
解析Mac OS下部署Pyhton的Django框架项目的过程
May 03 Python
浅析python中的分片与截断序列
Aug 09 Python
基于python中staticmethod和classmethod的区别(详解)
Oct 24 Python
python实现数据库跨服务器迁移
Apr 12 Python
windows下python安装pip图文教程
May 25 Python
python如何实现一个刷网页小程序
Nov 27 Python
python使用zip将list转为json的方法
Dec 31 Python
python将excel转换为csv的代码方法总结
Jul 03 Python
python模拟实现分发扑克牌
Apr 22 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实现遍历目录并删除指定文件中指定内容
2015/01/21 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
2015/11/24 PHP
PHP单例模式详解及实例代码
2016/12/21 PHP
PHP命名空间与自动加载类详解
2018/09/04 PHP
jquery实现文本框鼠标右击无效以及不能输入的代码
2010/11/05 Javascript
jQuery setTimeout()函数使用方法
2013/04/07 Javascript
Jquery实现点击切换图片并隐藏显示内容(2种方法实现)
2013/04/11 Javascript
邮箱下拉自动填充选择示例代码附图
2014/04/03 Javascript
JavaScript实现强制重定向至HTTPS页面
2015/06/10 Javascript
Bootstrap表单Form全面解析
2016/06/13 Javascript
JS制作图形验证码实现代码
2020/10/19 Javascript
jQuery 插件实现随机自由弹跳气泡样式
2017/01/12 Javascript
JavaScript实现定时页面跳转功能示例
2017/02/14 Javascript
ES6入门教程之let和const命令详解
2017/05/17 Javascript
JSON字符串操作移除空串更改key/value的介绍
2019/01/05 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
基于vue+axios+lrz.js微信端图片压缩上传方法
2019/06/25 Javascript
vue实现动态表格提交参数动态生成控件的操作
2020/11/09 Javascript
[38:40]2018DOTA2亚洲邀请赛 4.6淘汰赛 mineski vs LGD 第一场
2018/04/10 DOTA
Python中实现从目录中过滤出指定文件类型的文件
2015/02/02 Python
Python数据类型中的“冒号“[::]——分片与步长操作示例
2018/01/24 Python
Django使用中间件解决前后端同源策略问题
2019/09/02 Python
python DataFrame转dict字典过程详解
2019/12/26 Python
python实现用户名密码校验
2020/03/18 Python
Virtualenv 搭建 Py项目运行环境的教程详解
2020/06/22 Python
使用Html5 Stream开发实时监控系统
2020/06/02 HTML / CSS
物流管理专业应届生求职信
2013/11/21 职场文书
九年级家长会邀请函
2014/01/15 职场文书
校园联欢晚会主持词
2014/03/17 职场文书
教师节演讲稿
2014/05/06 职场文书
大学班级文化建设方案
2014/05/06 职场文书
保管员岗位职责
2015/02/14 职场文书
2015年公共机构节能宣传周活动总结
2015/03/26 职场文书
小学数学教师研修日志
2015/11/13 职场文书
教你部署vue项目到docker
2022/04/05 Vue.js
解决 redis 无法远程连接
2022/05/15 Redis