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实现的数据结构与算法之快速排序详解
Apr 22 Python
用Python编写web API的教程
Apr 30 Python
用Python实现一个简单的多线程TCP服务器的教程
May 05 Python
详解Python中的__new__、__init__、__call__三个特殊方法
Jun 02 Python
深入理解python多进程编程
Jun 12 Python
django小技巧之html模板中调用对象属性或对象的方法
Nov 30 Python
python实现扫描局域网指定网段ip的方法
Apr 16 Python
windows下python虚拟环境virtualenv安装和使用详解
Jul 16 Python
python多继承(钻石继承)问题和解决方法简单示例
Oct 21 Python
Python使用Numpy模块读取文件并绘制图片
May 13 Python
pytorch查看模型weight与grad方式
Jun 24 Python
python Timer 类使用介绍
Dec 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
谏山创故乡大分县日田市水坝将设立《进击的巨人》立艾伦、三笠以及阿尔敏的铜像!
2020/03/06 日漫
基于php split()函数的用法详解
2013/06/05 PHP
PHP防范SQL注入的具体方法详解(测试通过)
2014/05/09 PHP
destoon在360浏览器下出现用户被强行注销的解决方法
2014/06/26 PHP
PHP开发框架Laravel数据库操作方法总结
2014/09/03 PHP
php实现的支付宝网页支付功能示例【基于TP5框架】
2019/09/16 PHP
Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据
2010/03/15 Javascript
js delete 用法(删除对象属性及变量)
2014/08/24 Javascript
JS+CSS实现感应鼠标渐变显示DIV层的方法
2015/02/20 Javascript
jQuery实现预加载图片的方法
2015/03/17 Javascript
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
2016/02/25 Javascript
AngularJs Modules详解及示例代码
2016/09/01 Javascript
AngularJS实现DOM元素的显示与隐藏功能
2016/11/22 Javascript
JavaScript实现经典排序算法之冒泡排序
2016/12/28 Javascript
JavaScript无阻塞加载和defer、async详解
2017/02/26 Javascript
ES6 javascript的异步操作实例详解
2017/10/30 Javascript
vue-cli配置文件——config篇
2018/01/04 Javascript
详解Vue后台管理系统开发日常总结(组件PageHeader)
2019/11/01 Javascript
Vue 基于 vuedraggable 实现选中、拖拽、排序效果
2020/05/18 Javascript
vue prop传值类型检验方式
2020/07/30 Javascript
Vue循环中多个input绑定指定v-model实例
2020/08/31 Javascript
[52:10]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第二场 6.3
2018/06/04 DOTA
python中数据爬虫requests库使用方法详解
2018/02/11 Python
python如何定义带参数的装饰器
2018/03/20 Python
Python的argparse库使用详解
2018/10/09 Python
如何利用Python分析出微信朋友男女统计图
2019/01/25 Python
基于 Django 的手机管理系统实现过程详解
2019/08/16 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
2020/06/08 Python
使用HTML5 Geolocation实现一个距离追踪器
2018/04/09 HTML / CSS
建筑公司文秘岗位职责
2013/11/29 职场文书
日语专业个人的求职信
2013/12/03 职场文书
微笑面对生活演讲稿
2014/05/13 职场文书
个人委托书范本汇总
2014/10/01 职场文书
满月酒邀请函
2015/01/30 职场文书
环境卫生标语
2015/08/03 职场文书
Python按顺序遍历并读取文件夹中文件
2022/04/29 Python