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深入06——python的内存管理详解
Dec 07 Python
Python合并字典键值并去除重复元素的实例
Dec 18 Python
Django内容增加富文本功能的实例
Oct 17 Python
python使用pyqt写带界面工具的示例代码
Oct 23 Python
python的re模块使用方法详解
Jul 26 Python
Python 3.8正式发布,来尝鲜这些新特性吧
Oct 15 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
Jan 09 Python
Python selenium环境搭建实现过程解析
Sep 08 Python
Python爬虫自动化获取华图和粉笔网站的错题(推荐)
Jan 08 Python
Python tkinter实现日期选择器
Feb 22 Python
python图片灰度化处理的几种方法
Jun 23 Python
python编程实现清理微信重复缓存文件
Nov 01 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+dojo 的数据库保存拖动布局的一个方法dojo 这里下载
2007/03/07 PHP
linux php mysql数据库备份实现代码
2009/03/10 PHP
php通过字符串调用函数示例
2014/03/02 PHP
全面解读PHP的人气开发框架Laravel
2015/10/15 PHP
php微信开发之上传临时素材
2016/06/24 PHP
自定义Laravel (monolog)日志位置,并增加请求ID的实现
2019/10/17 PHP
PHP设计模式(四)原型模式Prototype实例详解【创建型】
2020/05/02 PHP
关于 byval 与 byref 的区别分析总结
2007/10/08 Javascript
使用jQuery实现的网页版的个人简历(可换肤)
2013/04/19 Javascript
鼠标滑在标题上显示图片的JS代码
2013/11/19 Javascript
jquery中获得元素尺寸和坐标的方法整理
2014/05/18 Javascript
JS基于VML技术实现的五角星礼花效果代码
2015/10/26 Javascript
javascript函数自动执行常用方法汇总
2016/03/28 Javascript
Bootstrap 模态框(Modal)插件代码解析
2016/12/21 Javascript
详解angularjs获取元素以及angular.element()用法
2017/07/25 Javascript
react 中父组件与子组件双向绑定问题
2019/05/20 Javascript
JS实现吸顶特效
2020/01/08 Javascript
JS表单验证插件之数据与逻辑分离操作实例分析【策略模式】
2020/05/01 Javascript
详细分析React 表单与事件
2020/07/08 Javascript
python 动态获取当前运行的类名和函数名的方法
2014/04/15 Python
python的else子句使用指南
2016/02/27 Python
python的变量与赋值详细分析
2017/11/08 Python
详解python使用Nginx和uWSGI来运行Python应用
2018/01/09 Python
python中类的属性和方法介绍
2018/11/27 Python
python获取当前文件路径以及父文件路径的方法
2019/07/10 Python
三个python爬虫项目实例代码
2019/12/28 Python
在tensorflow中实现去除不足一个batch的数据
2020/01/20 Python
Eclipse配置python默认头过程图解
2020/04/26 Python
Pytorch 高效使用GPU的操作
2020/06/27 Python
Python安装第三方库攻略(pip和Anaconda)
2020/10/15 Python
Cpython解释器中的GIL全局解释器锁
2020/11/09 Python
Tory Burch德国官网:美国时尚生活品牌
2018/01/03 全球购物
物流专业大学的自我评价
2014/01/11 职场文书
教师考核鉴定意见
2015/06/05 职场文书
多属性、多分类MySQL模式设计
2021/04/05 MySQL
golang中的空slice案例
2021/04/27 Golang