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 相关文章推荐
在Django的form中使用CSS进行设计的方法
Jul 18 Python
详解Django框架中用户的登录和退出的实现
Jul 23 Python
python实现简单登陆流程的方法
Apr 22 Python
Python如何处理大数据?3个技巧效率提升攻略(推荐)
Apr 15 Python
python通过opencv实现图片裁剪原理解析
Jan 19 Python
Python requests模块session代码实例
Apr 14 Python
解决import tensorflow as tf 出错的原因
Apr 16 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
Jul 09 Python
Python利用myqr库创建自己的二维码
Nov 24 Python
python之openpyxl模块的安装和基本用法(excel管理)
Feb 03 Python
python实战之90行代码写个猜数字游戏
Apr 22 Python
Python时间操作之pytz模块使用详解
Jun 14 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的header和asp中的redirect比较
2006/10/09 PHP
php5.3 goto函数介绍和示例
2014/03/21 PHP
IE JS编程需注意的内存释放问题
2009/06/23 Javascript
跟着JQuery API学Jquery 之二 属性
2010/04/09 Javascript
javascript 仿QQ滑动菜单效果代码
2010/09/03 Javascript
Firefox中通过JavaScript复制数据到剪贴板(Copy to Clipboard 跨浏览器版)
2013/11/22 Javascript
JavaScript设计模式之原型模式(Object.create与prototype)介绍
2014/12/28 Javascript
JavaScript中的fontsize()方法使用详解
2015/06/08 Javascript
JavaScript学习笔记(三):JavaScript也有入口Main函数
2015/09/12 Javascript
微信页面倒计时代码(解决safari不兼容date的问题)
2016/12/13 Javascript
vue.js如何更改默认端口号8080为指定端口的方法
2017/07/14 Javascript
微信小程序实现顶部普通选项卡效果(非swiper)
2020/06/19 Javascript
简单实现jquery隔行变色
2017/11/09 jQuery
Vue+Vux项目实践完整代码
2017/11/30 Javascript
vue结合axios与后端进行ajax交互的方法
2018/07/06 Javascript
JS实现的input选择图片本地预览功能示例
2018/08/29 Javascript
微信小程序模板消息推送的两种实现方式
2019/08/27 Javascript
JavaScript 函数用法详解【函数定义、参数、绑定、作用域、闭包等】
2020/05/12 Javascript
vue $mount 和 el的区别说明
2020/09/11 Javascript
[01:01:01]完美世界DOTA2联赛循环赛 GXR vs FTD BO2第一场 10.29
2020/10/29 DOTA
Tornado Web服务器多进程启动的2个方法
2014/08/04 Python
Python单链表简单实现代码
2016/04/27 Python
Python 中Pickle库的使用详解
2018/02/24 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
2018/07/11 Python
Django项目中实现使用qq第三方登录功能
2019/08/13 Python
Python读取Excel一列并计算所有对象出现次数的方法
2020/09/04 Python
PyCharm上安装Package的实现(以pandas为例)
2020/09/18 Python
Python如何使用ElementTree解析xml
2020/10/12 Python
css3 border-image使用说明
2010/06/23 HTML / CSS
html5 svg 中元素点击事件添加方法
2013/01/16 HTML / CSS
Habitat家居英国官方网站:沙发、家具、照明、厨房和户外
2019/12/12 全球购物
J2EE中的容器都包括哪些
2013/08/21 面试题
检讨书范文大全
2015/05/07 职场文书
聘任合同书
2015/09/21 职场文书
《我的伯父鲁迅先生》教学反思
2016/02/16 职场文书
golang协程池模拟实现群发邮件功能
2021/05/02 Golang