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使用PyGreSQL操作PostgreSQL数据库教程
Jul 30 Python
Django 路由控制的实现代码
Nov 08 Python
python存储16bit和32bit图像的实例
Dec 05 Python
Python Tkinter 简单登录界面的实现
Jun 14 Python
10款最好的Python开发编辑器
Jul 03 Python
python实现图片中文字分割效果
Jul 22 Python
Python拼接字符串的7种方式详解
Mar 19 Python
Python super()方法原理详解
Mar 31 Python
python 实现分组求和与分组累加求和代码
May 18 Python
Django websocket原理及功能实现代码
Nov 14 Python
浅谈Selenium+Webdriver 常用的元素定位方式
Jan 13 Python
OpenCV绘制圆端矩形的示例代码
Aug 30 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如何解决网站大流量与高并发的问题
2011/06/25 PHP
php压缩和解压缩字符串的方法
2015/03/14 PHP
php通过获取头信息判断图片类型的方法
2015/06/26 PHP
php实现的双色球算法示例
2017/06/20 PHP
PHP Class SoapClient not found解决方法
2018/01/20 PHP
映彩衣的js随笔(js图片切换效果)
2011/07/31 Javascript
JS 页面计时器示例代码
2013/10/28 Javascript
用js模拟struts2的多action调用示例
2014/05/19 Javascript
使用jQuery加载html页面到指定的div实现方法
2016/07/13 Javascript
对javascript继承的理解
2016/10/11 Javascript
JS函数多个参数默认值指定方法分析
2016/11/28 Javascript
SpringMVC简单整合Angular2的示例
2017/07/31 Javascript
详解vuex之store拆分即多模块状态管理(modules)篇
2018/11/13 Javascript
如何从零开始手写Koa2框架
2019/03/22 Javascript
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
2019/04/01 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
2019/06/17 Javascript
JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记
2020/07/15 Javascript
Vue中父子组件的值传递与方法传递
2020/09/28 Javascript
python基础教程之popen函数操作其它程序的输入和输出示例
2014/02/10 Python
PHP魔术方法__ISSET、__UNSET使用实例
2014/11/25 Python
Python学习之Anaconda的使用与配置方法
2018/01/04 Python
python调用Matplotlib绘制分布点并且添加标签
2018/05/31 Python
python 字典中文key处理,读取,比较方法
2018/07/06 Python
Python3交互式shell ipython3安装及使用详解
2020/07/11 Python
美国高品质个性化珠宝销售网站:Jewlr
2018/05/03 全球购物
JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
2015/10/22 面试题
毕业生文员求职信
2013/11/03 职场文书
商务日语毕业生自荐信
2013/11/23 职场文书
教师考核材料
2014/05/21 职场文书
优秀电子工程系毕业生求职信
2014/05/24 职场文书
社区艾滋病宣传活动总结
2015/05/07 职场文书
数据结构课程设计心得体会
2016/01/15 职场文书
《灰雀》教学反思
2016/02/19 职场文书
Canvas三种动态画圆实现方法说明(小结)
2021/04/16 Javascript
Golang全局变量加锁的问题解决
2021/05/08 Golang
win10截图快捷键win+shift+s没有反应无法截图怎么解决?
2022/08/14 数码科技