python中栈的标准实现方法,数据结构栈的基本运算_1

  python中栈的标准实现方法,数据结构栈的基本运算

  本文主要详细介绍Python中的堆栈。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下,希望能帮到你。

  00-1010什么是堆栈构建堆栈摘要

  

目录

  有时被称为“下推堆栈”。它是一个有序集合,添加和删除操作总是发生在同一端,即堆栈的“顶端”,堆栈的另一端称为“底端”.因此,最新添加的元素将被最先移除,和堆栈中的元素越靠近底部,它在堆栈中停留的时间越长。

  这种排序原则被称为后进先出(LIFO),即后进先出.它提供了一种基于在集合中的时间来排序的方式。最近增加的元素靠近顶部,而旧的元素靠近底部。

  堆栈的例子在日常生活中比比皆是。几乎所有的咖啡馆都有一堆托盘或盘子。你可以从上面拿一个,下一个顾客会拿下面的托盘或盘子。

  考虑到堆栈的反演性质,我们可以在使用计算机时想到一些例子。比如每个浏览器都有后退按钮。当我们从一个网页跳转到另一个网页时,这些网页——实际上是URL,并且都存储在一个堆栈中。当前浏览的网页在栈顶,最旧的网页在栈底。如果您单击后退按钮,您将开始反向浏览这些页面。

  

什么是栈

  如前所述,堆栈是元素的有序集合,添加操作与移除操作都发生在其顶端.堆栈的操作顺序是LIFO,它支持以下操作:

  向堆栈顶部添加一个元素,移除堆栈顶部的元素,返回堆栈顶部的元素,并返回堆栈中元素的数量。在我们知道了栈的基本特征之后,我们开始用代码来构建它。在面向对象编程语言中(以Python为例),每当需要在Python中实现stack这样的抽象数据类型时,都可以通过创建类来实现,数据类型的特性和操作方法也可以通过在类中定义方法来实现。

  我们来明确一下这个类的具体方法:

  创建一个空栈.它不带参数,将返回一个空堆栈。堆栈()将一个元素添加到栈的顶端.它需要一个参数item,没有返回值。推(项)将栈顶端的元素移除.它不需要参数,但是它将返回顶部元素并修改堆栈的内容。pop()返回栈顶端的元素,但是这个元素没有被删除。它不需要参数,也不修改堆栈的内容。皮克(返回栈中元素的数目).它不带参数,返回一个整数。尺寸()检查栈是否为空.它不带参数,返回一个布尔值。isepty()打印这个栈/列表,它不需要参数,将输出堆栈的内容。Look()可以通过使用Python提供的强大而简单的原生集合来实现,因为栈是元素的集合.在这里,我们将使用列表。列表的最左端将用来表示栈底,最右边将用来表示栈顶:

  类别堆栈:

  #定义一个列表/构建一个堆栈

  def __init__(self):

  self.items=[]

  打印(“你创建了一个堆栈!”)

  def isEmpty(self):

  return self.items==[]

  def look(自身):

  打印(自己的项目)

  定义推送(自身,项目):

  self.items.append(项目)

  打印(您在堆栈顶部添加了一个%s%项目

  def pop(自身):

  返回self.items.pop()

  def peek(自身):

  return self . items[len(self . items)-1]

  定义尺寸(自身):

  归还贷款(自有项目)

  以下展示了栈的操作及其返回结果:

  值得注意的是,你也可以选择使用列表头(左)作为栈顶。但是,在这种情况下,不能直接使用列表的pop方法和append方法,而必须通过使用列表的pop方法和insert方法显式访问下标为0的元素,即列表中的第一个元素。以下代码显示了这种方式:

  类别堆栈:

  def __init__(self):

  self.items=[]

  def isEmpty(self):

  return self.items==[]

  def look(自身):

  打印(自己的项目)

  定义推送(自身,项目):

  self.items.insert(0,item)

  def pop(自身):

  返回self.items.pop(0)

  def peek(自身):

  返回self.items[0]

  定义尺寸(自身):

  归还贷款(自有项目)

  虽然以上两种实现都是可行的,但是在性能上肯定是有区别的。append方法和pop方法的时间复杂度是o (1) o(1) o(1),也就是说第一个实现中的push操作和pop操作,无论栈中有多少个元素,都会在一个常数时间内完成。第二种实现的性能受到栈中元素数量的限制,因为insert(0)和pop(0)的时间复杂度是o (n) o(n) o(n),元素越多,速度越慢。

  显然,尽管这两种实现在逻辑上是相等的,但是在基准测试上花费的时间会有很大的不同。

  

构建一个栈

  本文到此为止。希望能帮到你,也希望你能多关注更多热门IT软件开发工作室的内容!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • mysql复合索引和组合索引,mysql组合索引数据结构
  • mysql复合索引和组合索引,mysql组合索引数据结构,Mysql之组合索引方法详解
  • mysql复合索引和组合索引,mysql复合索引数据结构
  • mysql复合索引和组合索引,mysql复合索引数据结构,MySQL的复合索引总结
  • b+树 多路搜索树,数据结构中树的分类
  • b+树 多路搜索树,数据结构中树的分类,数据结构-树(三):多路搜索树B树、B+树
  • avl树的构造,avl树特性,数据结构之AVL树详解
  • 数据结构c语言哈夫曼树,c语言哈夫曼树的构造,使用C语言详解霍夫曼树数据结构
  • c语言数据结构算法编程库,数据结构 c语言中文网
  • c语言数据结构算法编程库,数据结构 c语言中文网,C语言编程数据结构基础详解小白篇
  • c++纸牌游戏,数据结构纸牌游戏c语言
  • c++纸牌游戏,数据结构纸牌游戏c语言,C语言实战之纸牌游戏
  • ,,c#解析jobject的数据结构
  • ,,javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
  • ,,Java 数据结构与算法系列精讲之背包问题
  • 留言与评论(共有 条评论)
       
    验证码: