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通过调用mysql存储过程实现更新数据功能示例
Apr 03 Python
python excel使用xlutils类库实现追加写功能的方法
May 02 Python
详解Django-auth-ldap 配置方法
Dec 10 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
Jun 11 Python
python 批量解压压缩文件的实例代码
Jun 27 Python
pandas.DataFrame的pivot()和unstack()实现行转列
Jul 06 Python
python 3.7.4 安装 opencv的教程
Oct 10 Python
Python时间差中seconds和total_seconds的区别详解
Dec 26 Python
Numpy 理解ndarray对象的示例代码
Apr 03 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
Sep 09 Python
浅谈Python基础之列表那些事儿
May 11 Python
windows安装python超详细图文教程
May 21 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
优化使用mysql存储session的php代码
2008/01/10 PHP
基于PHP制作验证码
2016/10/12 PHP
Nigma vs Liquid BO3 第二场2.13
2021/03/10 DOTA
学习YUI.Ext 第三天
2007/03/10 Javascript
获取元素距离浏览器周边的位置的方法getBoundingClientRect
2013/04/17 Javascript
jQuery实现带玻璃流光质感的手风琴特效
2015/11/20 Javascript
jQuery简单实现iframe的高度根据页面内容自适应的方法
2016/08/01 Javascript
Javascript函数中的arguments.callee用法实例分析
2016/09/16 Javascript
jQuery操作复选框(CheckBox)的取值赋值实现代码
2017/01/10 Javascript
JavaScript提高加载和执行效率的方法
2017/02/03 Javascript
js控制一个按钮是否可点击(可使用)disabled的实例
2017/02/14 Javascript
jQuery事件_动力节点Java学院整理
2017/07/05 jQuery
ionic3 懒加载
2017/08/16 Javascript
Angular中封装fancyBox(图片预览)遇到问题小结
2017/09/01 Javascript
基于layui轮播图满屏是高度自适应的解决方法
2019/09/16 Javascript
JSONP解决JS跨域问题的实现
2020/05/25 Javascript
[03:02]2014DOTA2西雅图邀请赛 让队员自己告诉你DK NAVI备战情况
2014/07/08 DOTA
[02:19]2018年度DOTA2最佳核心位选手-完美盛典
2018/12/17 DOTA
用Python的Django框架来制作一个RSS阅读器
2015/07/22 Python
Sanic框架路由用法实例分析
2018/07/16 Python
Python爬取数据保存为Json格式的代码示例
2019/04/09 Python
Pandas之Dropna滤除缺失数据的实现方法
2019/06/25 Python
利用Python实现手机短信监控通知的方法
2019/07/22 Python
python3.7 利用函数os pandas利用excel对文件名进行归类
2019/09/29 Python
导致python中import错误的原因是什么
2020/07/01 Python
实例教程 利用html5和css3打造一款创意404页面
2014/10/20 HTML / CSS
Watch Station官方网站:世界一流的手表和智能手表
2020/01/05 全球购物
莫斯科珠宝厂官方网站:Miuz
2020/09/19 全球购物
JavaScript实现页面动态验证码的实现示例
2021/03/23 Javascript
学期自我评价
2014/01/27 职场文书
放飞梦想演讲稿
2014/05/05 职场文书
大学生就业自我推荐信
2014/05/10 职场文书
婚宴新郎致辞
2015/07/28 职场文书
导游词之包公祠
2019/11/25 职场文书
Python实现双向链表
2022/05/25 Python
Linux中sftp常用命令整理
2022/06/28 Servers