zoukankan      html  css  js  c++  java
  • 用python 实现一个栈

    前言

    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的设计者认为,“大家都是成年人了”~

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuqiang20121991/article/details/54139431
  • 相关阅读:
    .net日期类与UNIX时间戳的相互转换,长数字
    钉钉的生日模块在哪
    js判断手机是苹果(IOS)还是安卓(android) H5手机端自适应宽高
    .net网站部署winserver2008R2 IIS只列出目录 浏览只显示目录浏览
    ajax有时请求不到数据 后台,有时收不到返回值的解决办法
    overflow不超出时不显示滚动条 属性解决内容未超出依然显示滚动条轨道的问题
    PB取datawindow生成的语句。要在datawindow的sqlpreview事件
    电脑C盘缓存路径在哪,清理C盘哪个文件夹可以删
    PB里执行写SQL语句
    SQL SERVER合并行。将多行数据合并成一行,字符串拼接
  • 原文地址:https://www.cnblogs.com/wangkun122/p/9083109.html
Copyright © 2011-2022 走看看