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之有容乃大的list(4)
Sep 28 Python
Linux下为不同版本python安装第三方库
Aug 31 Python
PyQt5每天必学之创建窗口居中效果
Apr 19 Python
PyQt5每天必学之切换按钮
Aug 20 Python
浅析python继承与多重继承
Sep 13 Python
python使用PIL模块获取图片像素点的方法
Jan 08 Python
python3.7简单的爬虫实例详解
Jul 08 Python
Django ORM 查询管理器源码解析
Aug 05 Python
python绘制随机网络图形示例
Nov 21 Python
使用Tensorflow将自己的数据分割成batch训练实例
Jan 20 Python
python图片剪裁代码(图片按四个点坐标剪裁)
Mar 10 Python
python 获取域名到期时间的方法步骤
Feb 10 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 和 MySQL 基础教程(二)
2006/10/09 PHP
菜鸟学PHP之Smarty入门
2007/01/04 PHP
php生成缩略图的类代码
2008/10/02 PHP
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
2012/01/12 PHP
php var_export与var_dump 输出的不同
2013/08/09 PHP
thinkphp3.2点击刷新生成验证码
2016/02/16 PHP
php文件包含目录配置open_basedir的使用与性能详解
2017/04/03 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
2017/04/18 PHP
laravel5.5添加echarts实现画图功能的方法
2019/10/09 PHP
MC Dialog js弹出层 完美兼容多浏览器(5.6更新)
2010/05/06 Javascript
jQuery EasyUI API 中文文档 - ValidateBox验证框
2011/10/06 Javascript
从面试题学习Javascript 面向对象(创建对象)
2012/03/30 Javascript
用jQuery获取IE9下拉框默认值问题探讨
2013/07/22 Javascript
js随机生成网页背景颜色的方法
2015/02/26 Javascript
jQuery遮罩层实现方法实例详解(附遮罩层插件)
2015/12/08 Javascript
jQuery.ajax 跨域请求webapi设置headers的解决方案
2016/08/08 Javascript
js严格模式总结(分享)
2016/08/22 Javascript
jquery中用jsonp实现搜索框功能
2016/10/18 Javascript
jQuery实现Table表格隔行变色及高亮显示当前选择行效果示例
2017/02/14 Javascript
微信小程序模板template简单用法示例
2018/12/04 Javascript
jquery层次选择器的介绍
2019/01/18 jQuery
JS造成内存泄漏的几种情况实例分析
2020/03/02 Javascript
[43:35]EG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python实现简单的语音识别系统
2017/12/13 Python
python 产生token及token验证的方法
2018/12/26 Python
Python编写合并字典并实现敏感目录的小脚本
2019/02/26 Python
python mysql 字段与关键字冲突的解决方式
2020/03/02 Python
在echarts中图例legend和坐标系grid实现左右布局实例
2020/05/16 Python
泰国在线书店:SE-ED
2020/06/21 全球购物
应届生财务管理求职信
2013/11/06 职场文书
保安自我鉴定范文
2013/12/08 职场文书
在校大学生个人的自我评价
2014/02/13 职场文书
《小小竹排画中游》教学反思
2014/02/26 职场文书
扩大国家免疫规划实施方案
2014/03/21 职场文书
百年校庆感言
2015/08/01 职场文书
Redis分布式锁的7种实现
2022/04/01 Redis