Python实现的栈(Stack)

作者:BenCotreJohnson 时间:2022-12-18 20:35:51 

前言

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)网站的支持!

来源:http://blog.csdn.net/xuqiang20121991/article/details/54139431

标签:python,栈
0
投稿

猜你喜欢

  • python下对hsv颜色空间进行量化操作

    2022-11-22 01:56:12
  • PHP _construct()函数讲解

    2023-06-14 16:56:43
  • 浅谈django model postgres的json字段编码问题

    2021-12-21 13:55:12
  • pytorch中torch.topk()函数的快速理解

    2023-09-07 10:21:52
  • Python方法的延迟加载的示例代码

    2022-09-05 03:25:00
  • Javascript的时间戳和php的时间戳转换注意事项

    2023-11-19 16:12:30
  • executesql 存储过程

    2024-01-21 17:04:21
  • pandas 层次化索引的实现方法

    2023-11-24 19:04:02
  • Windows系统下安装GIt及GIT基本认识和配置

    2023-06-14 20:54:53
  • Python实现求一个集合所有子集的示例

    2022-09-01 20:56:51
  • 复习一下sql server的差异备份

    2024-01-20 13:30:34
  • Pytorch中.new()的作用详解

    2023-12-11 10:28:54
  • 如何解决ORA-01843与NLS_DATE_FORMAT问题

    2023-06-30 20:57:14
  • 基于python实现的百度新歌榜、热歌榜下载器(附代码)

    2022-10-29 10:16:12
  • python实现BP神经网络回归预测模型

    2023-01-21 17:53:44
  • go语言通过结构体生成json示例解析

    2024-04-26 17:23:53
  • eWebEditor 辑器按钮失效 IE8下eWebEditor编辑器无法使用的解决方法

    2023-06-27 07:07:26
  • Golang多线程爬虫高效抓取大量数据的利器

    2024-02-20 06:24:44
  • 教你快速掌握 MySQL数据库中触发器的应用

    2008-12-03 15:33:00
  • Win7 x64 IIS运行ASP+Access故障完美解决方法(转)

    2012-03-27 18:30:35
  • asp之家 网络编程 m.aspxhome.com