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 相关文章推荐
R vs. Python 数据分析中谁与争锋?
Oct 18 Python
Python金融数据可视化汇总
Nov 17 Python
Python Web程序部署到Ubuntu服务器上的方法
Feb 22 Python
Python pycharm 同时加载多个项目的方法
Jan 17 Python
python实现AES加密与解密
Mar 28 Python
一个可以套路别人的python小程序实例代码
Apr 09 Python
python-Web-flask-视图内容和模板知识点西宁街
Aug 23 Python
使用python实现回文数的四种方法小结
Nov 24 Python
python 解压、复制、删除 文件的实例代码
Feb 26 Python
pytorch之Resize()函数具体使用详解
Feb 27 Python
python3中sorted函数里cmp参数改变详解
Mar 12 Python
Python中的xlrd模块使用原理解析
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
php 移除数组重复元素的一点说明
2008/11/27 PHP
PHP中fwrite与file_put_contents性能测试代码
2013/08/02 PHP
php使用PDO方法详解
2014/12/27 PHP
php中ob函数缓冲机制深入理解
2015/08/03 PHP
PHP5.5.15+Apache2.4.10+MySQL5.6.20配置方法分享
2016/05/06 PHP
PHPCMS V9 添加二级导航的思路详解
2016/10/20 PHP
浅谈laravel aliases别名的原理
2019/10/24 PHP
JavaScript this 深入理解
2009/07/30 Javascript
原生javascript获取元素样式属性值的方法
2010/12/25 Javascript
js实现的跟随鼠标移动的时钟效果(中英文日期显示)
2011/01/17 Javascript
JS注册/移除事件处理程序(ExtJS应用程序设计实战)
2013/05/07 Javascript
一个简单的弹性返回顶部JS代码实现介绍
2013/06/09 Javascript
js实现汉字排序的方法
2015/07/23 Javascript
JQuery实现图片轮播效果
2015/09/15 Javascript
JS实现的简单鼠标跟随DiV层效果完整实例
2015/10/31 Javascript
jQuery CSS3相结合实现时钟插件
2016/01/08 Javascript
通过扫描二维码打开app的实现代码
2016/11/10 Javascript
javascript 取小数点后几位几种方法总结
2017/08/02 Javascript
详谈DOM简介及节点、属性、查找节点的方法
2017/11/16 Javascript
jQuery实现基本动画效果的方法详解
2018/09/06 jQuery
微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能)
2020/03/10 Javascript
ES11屡试不爽的新特性,你用上了几个
2020/10/21 Javascript
Vue.extend 登录注册模态框的实现
2020/12/29 Vue.js
分析在Python中何种情况下需要使用断言
2015/04/01 Python
python获取从命令行输入数字的方法
2015/04/29 Python
Python3.5编程实现修改IIS WEB.CONFIG的方法示例
2017/08/18 Python
Python利用splinter实现浏览器自动化操作方法
2018/05/11 Python
Python实现手写一个类似django的web框架示例
2018/07/20 Python
Python后台管理员管理前台会员信息的讲解
2019/01/28 Python
sklearn-SVC实现与类参数详解
2019/12/10 Python
Django 构建模板form表单的两种方法
2020/06/14 Python
小区文明倡议书
2014/05/16 职场文书
组工干部对照检查材料
2014/08/25 职场文书
介绍信的写法
2015/01/31 职场文书
《角的初步认识》教学反思
2016/02/17 职场文书
mysql多表查询-笔记七
2021/04/05 MySQL