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中多线程thread与threading的实现方法
Aug 18 Python
python实现的jpg格式图片修复代码
Apr 21 Python
利用python生成一个导出数据库的bat脚本文件的方法
Dec 30 Python
Python多进程multiprocessing用法实例分析
Aug 18 Python
详解Python3中ceil()函数用法
Feb 19 Python
python中报错"json.decoder.JSONDecodeError: Expecting value:"的解决
Apr 29 Python
Python 函数用法简单示例【定义、参数、返回值、函数嵌套】
Sep 20 Python
Flask框架搭建虚拟环境的步骤分析
Dec 21 Python
Python求平面内点到直线距离的实现
Jan 19 Python
详解python常用命令行选项与环境变量
Feb 20 Python
关于Kotlin中SAM转换的那些事
Sep 15 Python
Python实现机器学习算法的分类
Jun 03 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递归实现无限分类生成下拉列表的函数
2010/08/08 PHP
php array_filter除去数组中的空字符元素
2020/06/21 PHP
php自定义错误处理用法实例
2015/03/20 PHP
PHP面向对象自动加载机制原理与用法分析
2016/10/14 PHP
Bootstrap实现弹性搜索框
2016/07/11 Javascript
Jquery Easyui进度条组件Progress使用详解(8)
2020/03/26 Javascript
react性能优化达到最大化的方法 immutable.js使用的必要性
2017/03/09 Javascript
详解如何在angular2中获取节点
2017/11/23 Javascript
js实现点击按钮复制文本功能
2020/07/20 Javascript
vue.js实现带日期星期的数字时钟功能示例
2018/08/28 Javascript
vue实现新闻展示页的步骤详解
2019/04/11 Javascript
详解使用mocha对webpack打包的项目进行"冒烟测试"的大致流程
2020/04/27 Javascript
Python创建模块及模块导入的方法
2015/05/27 Python
Python数据类型详解(一)字符串
2016/05/08 Python
Python中使用platform模块获取系统信息的用法教程
2016/07/08 Python
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
2018/07/27 Python
python 与服务器的共享文件夹交互方法
2018/12/27 Python
python3.7实现云之讯、聚合短信平台的短信发送功能
2019/09/26 Python
pygame实现俄罗斯方块游戏(AI篇1)
2019/10/29 Python
Python values()与itervalues()的用法详解
2019/11/27 Python
python 解决flask 图片在线浏览或者直接下载的问题
2020/01/09 Python
Python利用全连接神经网络求解MNIST问题详解
2020/01/14 Python
浅谈Pytorch torch.optim优化器个性化的使用
2020/02/20 Python
Python爬虫之Spider类用法简单介绍
2020/08/04 Python
python如何快速拼接字符串
2020/10/28 Python
基于HTML5+Webkit实现树叶飘落动画
2017/12/28 HTML / CSS
维多利亚的秘密官方网站:Victoria’s Secret
2018/10/24 全球购物
事假请假条范文
2014/04/11 职场文书
协议书范本
2014/04/23 职场文书
正风肃纪剖析材料范文
2014/10/10 职场文书
诉讼授权委托书
2014/10/15 职场文书
个人股份转让协议书范本
2014/10/26 职场文书
依法行政工作汇报
2014/10/28 职场文书
说谎欺骗人检讨书300字
2014/11/18 职场文书
小程序实现筛子抽奖
2021/05/26 Javascript
一篇文章带你学习Mybatis-Plus(新手入门)
2021/08/02 Java/Android