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使用正则表达式检测密码强度源码分享
Jun 11 Python
python使用clear方法清除字典内全部数据实例
Jul 11 Python
Python中内建函数的简单用法说明
May 05 Python
Python初学者需要注意的事项小结(python2与python3)
Sep 26 Python
使用pip发布Python程序的方法步骤
Oct 11 Python
浅谈PySpark SQL 相关知识介绍
Jun 14 Python
python字符串查找函数的用法详解
Jul 08 Python
python自带tkinter库实现棋盘覆盖图形界面
Jul 17 Python
对python中 math模块下 atan 和 atan2的区别详解
Jan 17 Python
Python利用pip安装tar.gz格式的离线资源包
Sep 14 Python
Python爬虫自动化爬取b站实时弹幕实例方法
Jan 26 Python
Python 流媒体播放器的实现(基于VLC)
Apr 28 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
DC宇宙的第一个英雄,堪称动漫史鼻祖,如今成为美国文化的象征
2020/04/09 欧美动漫
PHP与SQL注入攻击防范小技巧
2011/09/16 PHP
解析php中反射的应用
2013/06/18 PHP
php自定义分页类完整实例
2015/12/25 PHP
PHP getallheaders无法获取自定义头(headers)的问题
2016/03/23 PHP
PHP实现对二维数组某个键排序的方法
2016/09/14 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
可输入的下拉框
2006/06/19 Javascript
javascript知识点收藏
2007/02/22 Javascript
JavaScript 三种不同位置代码的写法
2009/10/25 Javascript
JavaScript 图片预览效果 推荐
2009/12/22 Javascript
jQuery实现的支持IE的html滑动条
2015/03/16 Javascript
jQuery实现带延迟的二级tab切换下拉列表效果
2015/09/01 Javascript
基于jquery编写分页插件
2016/03/07 Javascript
JS中script标签defer和async属性的区别详解
2016/08/12 Javascript
浅谈JavaScript 函数参数传递到底是值传递还是引用传递
2016/08/23 Javascript
关于Angular2 + node接口调试的解决方案
2017/05/28 Javascript
在Vue中使用echarts的实例代码(3种图)
2017/07/10 Javascript
vue页面使用阿里oss上传功能的实例(一)
2017/08/09 Javascript
在Debian(Raspberry Pi)树莓派上安装NodeJS的教程详解
2017/09/19 NodeJs
vue配置请求本地json数据的方法
2018/04/11 Javascript
[01:23]一分钟告诉你 DOTA2为什么叫信仰2
2014/06/20 DOTA
[01:10:49]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
编写简单的Python程序来判断文本的语种
2015/04/07 Python
python中OrderedDict的使用方法详解
2017/05/05 Python
对Python捕获控制台输出流的方法详解
2019/01/07 Python
利用Python小工具实现3秒钟将视频转换为音频
2019/10/29 Python
Pytorch .pth权重文件的使用解析
2020/02/14 Python
Python读取文件内容为字符串的方法(多种方法详解)
2020/03/04 Python
Python类的绑定方法和非绑定方法实例解析
2020/03/04 Python
Jupyter notebook快速入门教程(推荐)
2020/05/18 Python
PHP基于phpqrcode类库生成二维码过程解析
2020/05/28 Python
lookfantastic荷兰:在线购买奢华护肤、护发和化妆品
2018/11/27 全球购物
公司的门卫岗位职责
2014/09/09 职场文书
领导欢迎词范文
2015/01/26 职场文书
修改并编译golang源码的操作步骤
2021/07/25 Golang