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 client使用http post 到server端的代码
Feb 10 Python
对于Python的Django框架使用的一些实用建议
Apr 03 Python
python生成IP段的方法
Jul 07 Python
pyinstaller打包opencv和numpy程序运行错误解决
Aug 16 Python
python 计算积分图和haar特征的实例代码
Nov 20 Python
在tensorflow中设置使用某一块GPU、多GPU、CPU的操作
Feb 07 Python
TensorFlow 输出checkpoint 中的变量名与变量值方式
Feb 11 Python
150行Python代码实现带界面的数独游戏
Apr 04 Python
keras 实现轻量级网络ShuffleNet教程
Jun 19 Python
Python Matplotlib简易教程(小白教程)
Jul 28 Python
mac系统下安装pycharm、永久激活、中文汉化详细教程
Nov 24 Python
python人工智能human learn绘图可创建机器学习模型
Nov 23 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上传文件时文件过大$_FILES为空的解决方法
2013/11/26 PHP
php+mysqli实现将数据库中一张表信息打印到表格里的方法
2015/01/28 PHP
PHP中的session安全吗?
2016/01/22 PHP
5 cool javascript apps
2007/03/24 Javascript
EasyUI的treegrid组件动态加载数据问题的解决办法
2011/12/11 Javascript
热点新闻滚动特效的js代码
2013/08/17 Javascript
贴近用户体验的Jquery日期、时间选择插件
2015/08/19 Javascript
jQuery实现的无限级下拉菜单功能示例
2016/09/12 Javascript
js封装成插件的步骤方法
2017/09/11 Javascript
JS常见错误(Error)及处理方案详解
2020/07/02 Javascript
Vue中用JSON实现刷新界面不影响倒计时
2020/10/26 Javascript
Python+Django在windows下的开发环境配置图解
2009/11/11 Python
Windows下安装python2.7及科学计算套装
2015/03/05 Python
python opencv实现任意角度的透视变换实例代码
2018/01/12 Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
2018/06/19 Python
详解Anconda环境下载python包的教程(图形界面+命令行+pycharm安装)
2019/11/11 Python
Python编程快速上手——Excel表格创建乘法表案例分析
2020/02/28 Python
Matplotlib使用Cursor实现UI定位的示例代码
2020/03/12 Python
python破解同事的压缩包密码
2020/10/14 Python
CSS3打造百度贴吧的3D翻牌效果示例
2017/01/04 HTML / CSS
html5教程调用绘图api画简单的圆形代码分享
2013/12/04 HTML / CSS
New Balance波兰官方商城:始于1906年,百年慢跑品牌
2017/08/15 全球购物
美国最大的在线水培用品商店:GrowersHouse.com
2018/08/14 全球购物
Lovedrobe官网:英国领先的大码服装品牌
2019/09/19 全球购物
Nordgreen手表德国官方网站:丹麦极简主义手表
2019/10/31 全球购物
助人为乐表扬信范文
2014/01/14 职场文书
个人贷款担保书
2014/04/01 职场文书
给客户的感谢信
2015/01/21 职场文书
中考学习决心书
2015/02/04 职场文书
入党介绍人意见范文
2015/06/01 职场文书
《颐和园》教学反思
2016/02/19 职场文书
会计工作自我鉴定范文
2019/06/21 职场文书
读《解忧杂货店》有感:请相信一切都是最好的安排
2019/11/07 职场文书
《好妈妈胜过好老师》:每个孩子的优秀都是有源头的
2020/01/03 职场文书
css3实现的加载动画效果
2021/04/07 HTML / CSS
Linux在两个服务器直接传文件的操作方法
2022/08/05 Servers