Python实现的栈(Stack)

 更新时间:2018年01月26日 16:36:12   作者:BenCotreJohnson  
栈作为一种数据结构,是一种只能在一端进行插入和删除操作。这篇文章给大家介绍了Python实现的栈(Stack)的相关资料,感兴趣的朋友一起看看吧

前言

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),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • Flask web上传获取图像Image读取并使用方式

    Flask web上传获取图像Image读取并使用方式

    这篇文章主要介绍了Flask web上传获取图像Image读取并使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Python常用内置模块之xml模块(详解)

    Python常用内置模块之xml模块(详解)

    下面小编就为大家带来一篇Python常用内置模块之xml模块(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • 利用Django-environ如何区分不同环境

    利用Django-environ如何区分不同环境

    这篇文章主要给大家介绍了关于利用Django-environ如何区分不同环境的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用django具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-08-08
  • python实现批量修改文件名代码

    python实现批量修改文件名代码

    本文给大家分享的是一段仅仅10行代码就实现了批量修改文件名的python脚本,推荐给大家,有需要的小伙伴可以参考下
    2017-09-09
  • Python列表推导式详解

    Python列表推导式详解

    列表推导式是Python构建列表(list)的一种快捷方式,可以使用简洁的代码就创建出一个列表.本文通过代码示例详细介绍了python列表推导式,感兴趣的同学可以参考阅读
    2023-04-04
  • 详解Django admin高级用法

    详解Django admin高级用法

    这篇文章主要介绍了Django admin高级用法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • Python 字符串池化的前提

    Python 字符串池化的前提

    这篇文章主要介绍了Python 字符串池化的前提,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • python中opencv图像叠加、图像融合、按位操作的具体实现

    python中opencv图像叠加、图像融合、按位操作的具体实现

    opencv图像操作可以更好更快的方便我们处理图片,本文主要介绍了图像叠加、图像融合、按位操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • Python使用logging实现多进程安全的日志模块

    Python使用logging实现多进程安全的日志模块

    这篇文章主要为大家详细介绍了Python如何使用标准库logging实现多进程安全的日志模块,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2024-01-01
  • PyQt5每天必学之拖放事件

    PyQt5每天必学之拖放事件

    这篇文章主要为大家详细介绍了PyQt5每天必学之拖放事件的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04

最新评论