Python实现的栈(Stack)


Posted in Python onJanuary 26, 2018

前言

Python本身已有顺序表(List、Tupple)的实现,所以这里从栈开始。

什么是栈

想象一摞被堆起来的书,这就是栈。这堆书的特点是,最后被堆进去的书,永远在最上面。从这堆书里面取一本书出来,取哪本书最方便?肯定是最上面那本。栈这种数据结构的特点就是如此:后进先出(Last In First Out - LIFO),即最后被堆进去的数据,最先被拿出来。

栈的Python实现

栈可以用顺序表方式实现,也可以用链表方式实现。我大Python的内建数据结构太强大,可以用list直接实现栈,简单快捷。人生苦短,我用Python。代码如下:

class Stack(object):
  # 初始化栈为空列表
  def __init__(self):
    self.items = []
  # 判断栈是否为空,返回布尔值
  def is_empty(self):
    return self.items == []
  # 返回栈顶元素
  def peek(self):
    return self.items[len(self.items) - 1]
  # 返回栈的大小
  def size(self):
    return len(self.items)
  # 把新的元素堆进栈里面(程序员喜欢把这个过程叫做压栈,入栈,进栈……)
  def push(self, item):
    self.items.append(item)
  # 把栈顶元素丢出去(程序员喜欢把这个过程叫做出栈……)
  def pop(self, item):
    return self.items.pop()
if __name__ == __main__:
  # 初始化一个栈对象
  my_stack = Stack()
  # 把'h'丢进栈里
  my_stack.push('h')
  # 把'a'丢进栈里
  my_stack.push('a')
  # 看一下栈的大小(有几个元素)
  print my_stack.size()
  # 打印栈顶元素
  print my_stack.peek()
  # 把栈顶元素丢出去,并打印出来
  print my_stack.pop()
  # 再看一下栈顶元素是谁
  print my_stack.peek()
  # 这个时候栈的大小是多少?
  print my_stack.size()
  # 再丢一个栈顶元素
  print my_stack.pop()
  # 看一下栈的大小
  print my_stack.size
  # 栈是不是空了?
  print my_stack.is_empty()
  # 哇~真好吃~
  print 'Yummy~'

Tips:

看完上面的代码,聪明的同学一定知道了,Python里面实现栈,就是把list包装成一个类,再添加一些方法作为栈的基本操作。其他的数据结构在Python中也是以类似的方式实现的。
那么,这里有一些有的没的要说一下~

如果希望items[]是Stack类私有的属性,这样做就好了:

def __init__(self):
  self.__items = []

没错,就是在items前面加两个下划线__,在Python中,类的私有成员就是这样定义哒~

如果希望限定Stack类的成员只有items,不要其他的怪蜀黍乱加成员,那么这样做就好了:

class Stack(object):
  __slots__ = ('__items')

  def __init__(self):
    self.__items = []

这样就安全多啦~

Python并没有Java里的public/private/protected这样的修饰符,因为Python的设计者认为,“大家都是成年人了”~

总结

以上所述是小编给大家介绍的Python实现的栈(Stack),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
浅析AST抽象语法树及Python代码实现
Jun 06 Python
python 简单的多线程链接实现代码
Aug 28 Python
python常见的格式化输出小结
Dec 15 Python
ubuntu中配置pyqt4环境教程
Dec 27 Python
python跳过第一行快速读取文件内容的实例
Jul 12 Python
Python可变参数会自动填充前面的默认同名参数实例
Nov 18 Python
pytorch实现Tensor变量之间的转换
Feb 17 Python
python内打印变量之%和f的实例
Feb 19 Python
python标准库OS模块函数列表与实例全解
Mar 10 Python
Python Tornado之跨域请求与Options请求方式
Mar 28 Python
Python 操作 MySQL数据库
Sep 18 Python
Django2.1.7 查询数据返回json格式的实现
Dec 29 Python
使用python实现链表操作
Jan 26 #Python
Python中optparser库用法实例详解
Jan 26 #Python
python利用socketserver实现并发套接字功能
Jan 26 #Python
Django的HttpRequest和HttpResponse对象详解
Jan 26 #Python
Python编程实现的简单神经网络算法示例
Jan 26 #Python
Django使用httpresponse返回用户头像实例代码
Jan 26 #Python
Django rest framework基本介绍与代码示例
Jan 26 #Python
You might like
解析php时间戳与日期的转换
2013/06/06 PHP
PHP时间格式控制符对照表分享
2013/07/23 PHP
destoon会员注册提示“数据校验失败(2)”解决方法
2014/06/21 PHP
php 常用的系统函数
2017/02/07 PHP
Ucren Virtual Desktop V2.0
2006/11/07 Javascript
jquery 经典动画菜单效果代码
2010/01/26 Javascript
纯CSS打造的导航菜单(附jquery版)
2010/08/07 Javascript
Javascript的并行运算实现代码
2010/11/19 Javascript
用jquery存取照片的具体实现方法
2013/06/30 Javascript
javascript操作table(insertRow,deleteRow,insertCell,deleteCell方法详解)
2013/12/16 Javascript
jQuery+html5实现div弹出层并遮罩背景
2015/04/15 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构
2015/11/19 Javascript
javascript的replace方法结合正则使用实例总结
2016/06/16 Javascript
浅谈JavaScript 中有关时间对象的方法
2016/08/15 Javascript
浅谈Node.js:理解stream
2016/12/08 Javascript
layer实现弹窗提交信息
2016/12/12 Javascript
手机端转换rem适应
2017/04/01 Javascript
Vue.js学习笔记之常用模板语法详解
2017/07/25 Javascript
javaScript封装的各种写法
2017/08/14 Javascript
完美解决iview 的select下拉框选项错位的问题
2018/03/02 Javascript
js数据类型转换与流程控制操作实例分析
2019/12/18 Javascript
vue实现登录、注册、退出、跳转等功能
2020/12/23 Vue.js
wxPython学习之主框架实例
2014/09/28 Python
Python 爬虫学习笔记之单线程爬虫
2016/09/21 Python
Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法
2019/06/05 Python
PyQt 图解Qt Designer工具的使用方法
2019/08/06 Python
使用pyqt5 tablewidget 单元格设置正则表达式
2019/12/13 Python
python cv2截取不规则区域图片实例
2019/12/21 Python
python2 对excel表格操作完整示例
2020/02/23 Python
Python reversed函数及使用方法解析
2020/03/17 Python
牦牛毛户外探险服装:Kora
2019/02/08 全球购物
党建工作先进材料
2014/05/02 职场文书
2014年驻村干部工作总结
2014/11/17 职场文书
2014年心理健康教育工作总结
2014/12/06 职场文书
2014年生活老师工作总结
2014/12/23 职场文书
幼儿园教师工作总结2015
2015/04/02 职场文书