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中with语句的用法
Apr 15 Python
简化Python的Django框架代码的一些示例
Apr 20 Python
python中利用队列asyncio.Queue进行通讯详解
Sep 10 Python
Python使用base64模块进行二进制数据编码详解
Jan 11 Python
Python实现求一个集合所有子集的示例
May 04 Python
Atom的python插件和常用插件说明
Jul 08 Python
Python获取数据库数据并保存在excel表格中的方法
Jun 12 Python
Python 实现自动获取种子磁力链接方式
Jan 16 Python
Python类中的装饰器在当前类中的声明与调用详解
Apr 15 Python
使用Python三角函数公式计算三角形的夹角案例
Apr 15 Python
重写django的model下的objects模型管理器方式
May 15 Python
python 提取html文本的方法
May 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操作SVN版本服务器类代码
2011/11/27 PHP
解析php防止form重复提交的方法
2013/07/01 PHP
php向js函数传参的几种方法
2014/08/10 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
2019/10/09 PHP
基于PHP实现生成随机水印图片
2020/12/09 PHP
JavaScript中的对象化编程
2008/01/16 Javascript
JavaScript入门教程(10) 认识其他对象
2009/01/31 Javascript
jquery中获得$.ajax()事件返回的值并添加事件的方法
2010/04/15 Javascript
JQuery的Ajax跨域请求原理概述及实例
2013/04/26 Javascript
jQuery实现Div拖动+键盘控制综合效果的方法
2015/03/10 Javascript
js实现选中复选框文字变色的方法
2015/08/14 Javascript
javascript设计简单的秒表计时器
2020/09/05 Javascript
AngularJS实现按钮提示与点击变色效果
2016/09/07 Javascript
Bootstrap基本样式学习笔记之图片(6)
2016/12/07 Javascript
JS实现的加减乘除四则运算计算器示例
2017/08/09 Javascript
jquery树形插件zTree高级使用详解
2019/08/16 jQuery
通过实例解析JavaScript for in及for of区别
2020/06/15 Javascript
Element Popover 弹出框的使用示例
2020/07/26 Javascript
Tornado Web服务器多进程启动的2个方法
2014/08/04 Python
Python编程入门之Hello World的三种实现方式
2015/11/13 Python
MySQL中表的复制以及大型数据表的备份教程
2015/11/25 Python
python实现简单加密解密机制
2019/03/19 Python
解决Pycharm后台indexing导致不能run的问题
2019/06/27 Python
Python线程指南分享
2019/11/19 Python
python 实现提取log文件中的关键句子,并进行统计分析
2019/12/24 Python
基于Tensorflow使用CPU而不用GPU问题的解决
2020/02/07 Python
简单了解django处理跨域请求最佳解决方案
2020/03/25 Python
阿根廷首家户外用品制造商和经销商:Montagne
2018/02/12 全球购物
客服工作职责
2013/12/11 职场文书
我的大学生活职业生涯规划
2014/01/02 职场文书
积极分子思想汇报
2014/01/04 职场文书
我未来的职业规划范文
2014/01/11 职场文书
《威尼斯的小艇》教学反思
2014/02/17 职场文书
使用Python解决图表与画布的间距问题
2022/04/11 Python
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
2022/06/14 Golang
kubernetes集群搭建Zabbix监控平台的详细过程
2022/07/07 Servers