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内置函数的用法实例教程
Sep 08 Python
使用Python编写提取日志中的中文的脚本的方法
Apr 30 Python
Python中数字以及算数运算符的相关使用
Oct 12 Python
Python的Django框架中使用SQLAlchemy操作数据库的教程
Jun 02 Python
浅谈flask截获所有访问及before/after_request修饰器
Jan 18 Python
Python线程同步的实现代码
Oct 03 Python
python读取目录下最新的文件夹方法
Dec 24 Python
django框架实现一次性上传多个文件功能示例【批量上传】
Jun 19 Python
对Python中一维向量和一维向量转置相乘的方法详解
Aug 26 Python
简单了解python filter、map、reduce的区别
Jan 14 Python
python打包多类型文件的操作方法
Sep 21 Python
Python find()、rfind()方法及作用
Dec 24 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
解决File size limit exceeded 错误的方法
2013/06/14 PHP
四种php中webservice实现的简单架构方法及实例
2015/02/03 PHP
php实现Mysql简易操作类
2015/10/11 PHP
分析php://output和php://stdout的区别
2018/05/06 PHP
PHP使用POP3读取邮箱接收邮件的示例代码
2020/07/08 PHP
javascript学习网址备忘
2007/05/29 Javascript
IE浏览器PNG图片透明效果代码
2008/09/02 Javascript
自己的js工具 Cookie 封装
2009/08/21 Javascript
js或css文件后面跟参数的原因说明
2010/01/09 Javascript
JS 在指定数组中随机取出N个不重复的数据
2014/06/10 Javascript
JS实现很酷的水波文字特效实例
2015/02/26 Javascript
JS随机调用指定函数的方法
2015/07/01 Javascript
举例讲解JavaScript substring()的使用方法
2015/11/09 Javascript
网页前端登录js按Enter回车键实现登陆的两种方法
2016/05/10 Javascript
Javascript发送AJAX请求实例代码
2016/08/21 Javascript
jquery中用jsonp实现搜索框功能
2016/10/18 Javascript
JS自动生成动态HTML验证码页面
2017/06/14 Javascript
nodejs前端自动化构建环境的搭建
2017/07/26 NodeJs
js断点调试经验分享
2017/12/08 Javascript
详解angular应用容器化部署
2018/08/14 Javascript
解决mui框架中switch开关通过js控制开或者关状态时小圆点不动的问题
2019/09/03 Javascript
jQuery单页面文字搜索插件jquery.fullsearch.js的使用方法
2020/02/04 jQuery
JS实现多选框的操作
2020/06/24 Javascript
Python ljust rjust center输出
2008/09/06 Python
简单实现python收发邮件功能
2018/01/05 Python
Python3正则匹配re.split,re.finditer及re.findall函数用法详解
2018/06/11 Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
2020/02/19 Python
sklearn+python:线性回归案例
2020/02/24 Python
C#面试题问题集
2016/04/02 面试题
一道输出判断型Java面试题
2014/10/01 面试题
医学生自我鉴定范文
2013/11/08 职场文书
资金主管岗位职责范本
2014/03/04 职场文书
初中作文评语大全
2014/04/23 职场文书
个人委托函范文
2015/01/29 职场文书
企业战略合作意向书
2015/05/08 职场文书
使用HTML+Css+transform实现3D导航栏的示例代码
2021/03/31 HTML / CSS