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中模版标签的解析与参数传递
Jul 21 Python
Python 爬虫模拟登陆知乎
Sep 23 Python
Queue 实现生产者消费者模型(实例讲解)
Nov 13 Python
Python基本socket通信控制操作示例
Jan 30 Python
Python数据类型之Dict字典实例详解
May 07 Python
线程安全及Python中的GIL原理分析
Oct 29 Python
pygame库实现移动底座弹球小游戏
Apr 14 Python
python实现简单飞行棋
Feb 06 Python
将自己的数据集制作成TFRecord格式教程
Feb 17 Python
new_zeros() pytorch版本的转换方式
Feb 18 Python
pycharm 2018 激活码及破解补丁激活方式
Sep 21 Python
Python ConfigParser模块的使用示例
Oct 12 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中空字符串介绍0、null、empty和false之间的关系
2012/09/25 PHP
php根据isbn书号查询amazon网站上的图书信息的示例
2014/02/13 PHP
ThinkPHP实例化模型的四种方法概述
2014/08/22 PHP
Zend Framework入门之环境配置及第一个Hello World示例(附demo源码下载)
2016/03/21 PHP
PHP实现统计所有字符在字符串中出现次数的方法
2017/10/17 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
2019/02/25 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
2019/11/14 PHP
用JS剩余字数计算的代码
2008/07/03 Javascript
JavaScript数值数组排序示例分享
2014/05/27 Javascript
JQuery点击行tr实现checkBox选中的简单实例
2016/05/26 Javascript
JS实用的带停顿的逐行文本循环滚动效果实例
2016/11/23 Javascript
Bootstrap select实现下拉框多选效果
2016/12/23 Javascript
vue router2.0二级路由的简单使用
2017/07/05 Javascript
使用MUI框架模拟手机端的下拉刷新和上拉加载功能
2017/09/04 Javascript
prototype.js简单实现ajax功能示例
2017/10/18 Javascript
js经验分享 JavaScript反调试技巧
2018/03/10 Javascript
Electron + vue 打包桌面操作流程详解
2019/06/24 Javascript
小程序怎样让wx.navigateBack更好用的方法实现
2019/11/01 Javascript
Python使用剪切板的方法
2017/06/06 Python
Python cookbook(数据结构与算法)对切片命名清除索引的方法
2018/03/13 Python
QML使用Python的函数过程解析
2019/09/26 Python
Python利用Scrapy框架爬取豆瓣电影示例
2020/01/17 Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
2020/02/07 Python
详解如何在PyCharm控制台中输出彩色文字和背景
2020/08/17 Python
DRF框架API版本管理实现方法解析
2020/08/21 Python
Marriott中国:万豪国际酒店查询预订
2016/09/02 全球购物
工业自动化毕业生自荐信范文
2014/01/04 职场文书
创业计划书的主要内容有哪些
2014/01/29 职场文书
机械设计及其自动化求职推荐信
2014/02/17 职场文书
《鹬蚌相争》教学反思
2014/04/22 职场文书
作文批改评语大全
2014/04/23 职场文书
小学教师培训方案
2014/06/09 职场文书
2014年学生会干事工作总结
2014/11/07 职场文书
浅析Redis Sentinel 与 Redis Cluster
2021/06/24 Redis
Go语言基础知识点介绍
2021/07/04 Golang
Redis实现分布式锁的五种方法详解
2022/06/14 Redis