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 相关文章推荐
Python中动态获取对象的属性和方法的教程
Apr 09 Python
Python进阶学习之特殊方法实例详析
Dec 01 Python
python使用logging模块发送邮件代码示例
Jan 18 Python
Python文本统计功能之西游记用字统计操作示例
May 07 Python
Python实现查询某个目录下修改时间最新的文件示例
Aug 29 Python
linux安装Python3.4.2的操作方法
Sep 28 Python
Python中时间datetime的处理与转换用法总结
Feb 18 Python
详解django+django-celery+celery的整合实战
Mar 19 Python
python 返回一个列表中第二大的数方法
Jul 09 Python
tensorflow没有output结点,存储成pb文件的例子
Jan 04 Python
python中元组的用法整理
Jun 15 Python
Python word文本自动化操作实现方法解析
Nov 05 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
磨咖啡豆的密诀
2021/03/03 冲泡冲煮
深入理解PHP之数组(遍历顺序)  Laruence原创
2012/06/13 PHP
ThinkPHP分页实例
2014/10/15 PHP
php之curl实现http与https请求的方法
2014/10/21 PHP
php实现阿拉伯数字和罗马数字相互转换的方法
2015/04/17 PHP
php异步:在php中使用fsockopen curl实现类似异步处理的功能方法
2016/12/10 PHP
PHP文字转图片功能原理与实现方法分析
2017/08/31 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
php实现构建排除当前元素的乘积数组方法
2018/10/06 PHP
jQuery 数据缓存data(name, value)详解及实现
2010/01/04 Javascript
基于jquery实现的类似百度搜索的输入框自动完成功能
2011/08/23 Javascript
改进版通过Json对象实现深复制的方法
2012/10/24 Javascript
模拟一个类似百度google的模糊搜索下拉列表
2014/04/15 Javascript
jQuery插件制作的实例教程
2016/05/16 Javascript
JQuery遍历元素的后代和同胞实现方法
2016/09/18 Javascript
js控制台输出的方法(详解)
2016/11/26 Javascript
原生js实现下拉框功能(支持键盘事件)
2017/01/13 Javascript
原生javascript实现读写CSS样式的方法详解
2017/02/20 Javascript
vue.js实现数据动态响应 Vue.set的简单应用
2017/06/15 Javascript
JS实现点击下拉菜单把选择的内容同步到input输入框内的实例
2018/01/23 Javascript
JavaScript偏函数与柯里化实例详解
2019/03/27 Javascript
你准备好迎接vue3.0了吗
2020/04/28 Javascript
uniapp实现可滑动选项卡
2020/10/21 Javascript
[01:06:42]VP vs NewBee Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
python用Pygal如何生成漂亮的SVG图像详解
2017/02/10 Python
Python使用pyshp库读取shapefile信息的方法
2018/12/29 Python
python元组和字典的内建函数实例详解
2019/10/22 Python
python3获取控制台输入的数据的具体实例
2020/08/16 Python
css3教程之倾斜页面
2014/01/27 HTML / CSS
CSS3田字格列表的样式编写方法
2018/11/22 HTML / CSS
伊芙丽官方旗舰店:中国淑女一线品牌
2017/12/01 全球购物
2014年小学教学工作总结
2014/11/13 职场文书
毕业论文致谢怎么写
2015/05/14 职场文书
法制教育观后感
2015/06/17 职场文书
趣味运动会加油词
2015/07/18 职场文书
idea下配置tomcat避坑详解
2022/04/12 Servers