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实现识别相似图片小结
Feb 22 Python
Python和JavaScript间代码转换的4个工具
Feb 22 Python
python 删除大文件中的某一行(最有效率的方法)
Aug 19 Python
Python使用base64模块进行二进制数据编码详解
Jan 11 Python
Numpy 改变数组维度的几种方法小结
Aug 02 Python
树莓派+摄像头实现对移动物体的检测
Jun 22 Python
详解Pandas之容易让人混淆的行选择和列选择
Jul 10 Python
基于python的itchat库实现微信聊天机器人(推荐)
Oct 29 Python
浅谈tensorflow模型保存为pb的各种姿势
May 25 Python
python suds访问webservice服务实现
Jun 26 Python
Python爬虫实例——scrapy框架爬取拉勾网招聘信息
Jul 14 Python
Pygame框架实现飞机大战
Aug 07 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
虫族 Zerg 热键控制
2020/03/14 星际争霸
Zerg建筑一览
2020/03/14 星际争霸
基于php实现随机合并数组并排序(原排序)
2015/11/26 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
2016/07/02 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
不错的asp中显示新闻的功能
2006/10/13 Javascript
用js实现多域名不同文件的调用方法
2007/01/12 Javascript
使用jQuery同时控制四张图片的伸缩实现代码
2013/04/19 Javascript
jQuery中使用each处理json数据
2015/04/23 Javascript
Jquery 全选反选实例代码
2015/11/19 Javascript
很棒的js选项卡切换效果
2016/07/15 Javascript
Vue.js组件tab实现选项卡切换
2020/03/23 Javascript
vue实现前进刷新后退不刷新效果
2018/01/26 Javascript
JS+HTML5 Canvas实现简单的写字板功能示例
2018/08/30 Javascript
JavaScript事件委托实现原理及优点进行
2020/08/29 Javascript
vue实现下拉菜单树
2020/10/22 Javascript
[01:04:14]VP vs TNC 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
对python文件读写的缓冲行为详解
2019/02/13 Python
Python 使用PyQt5 完成选择文件或目录的对话框方法
2019/06/27 Python
twilio python自动拨打电话,播放自定义mp3音频的方法
2019/08/08 Python
python3调用windows dos命令的例子
2019/08/14 Python
图解python全局变量与局部变量相关知识
2019/11/02 Python
Python 实现顺序高斯消元法示例
2019/12/09 Python
PyTorch学习:动态图和静态图的例子
2020/01/06 Python
django xadmin 管理器常用显示设置方式
2020/03/11 Python
浅析关于Keras的安装(pycharm)和初步理解
2020/10/23 Python
python自动从arxiv下载paper的示例代码
2020/12/05 Python
Python爬虫入门教程01之爬取豆瓣Top电影
2021/01/24 Python
ZWILLING双立人英国网上商店:德国刀具锅具厨具品牌
2018/05/15 全球购物
Omio荷兰:预订火车、巴士和机票
2018/11/04 全球购物
Abbott Lyon官网:女士手表、珠宝及配件
2020/12/26 全球购物
简述数组与指针的区别
2014/01/02 面试题
土木工程毕业生自荐信
2013/09/21 职场文书
运动会广播稿200字
2014/01/15 职场文书
社区服务活动总结
2014/05/07 职场文书
MySql存储过程之逻辑判断和条件控制
2021/05/26 MySQL