栈抽象数据类型由下面的结构和操作定义。栈是元素的有序集合,添加操作与移除操作都发生在其顶端。栈的操作顺序是 LIFO,它支持以下操作:

Stack() 创建一个空栈。它不需要参数,且会返回一个空栈。

push(item) 将一个元素添加到栈的顶端。它需要一个参数 item,且无返回值。

pop() 将栈顶端的元素移除。它不需要参数,但会返回顶端的元素,并且修改栈的内容。

peek() 返回栈顶端的元素,但是并不移除该元素。它不需要参数,也不会修改栈的内容。

isEmpty() 检查栈是否为空。它不需要参数,且会返回一个布尔值。

size() 返回栈中元素的数目。它不需要参数,且会返回一个整数。

抽象数据类型的实现常被称为数据结构

和其他面向对象编程语言一样,每当需要在 Python 中实现像栈这样的抽 象数据类型时,就可以创建新类。栈的操作通过方法实现。更进一步地说,因为栈是元素的集合, 所以完全可以利用 Python 提供的强大、简单的原生集合来实现。这里,我们将使用列表。

Python 列表是有序集合,它提供了一整套方法。举例来说,对于列表 [2, 5, 3, 6, 7, 4], 只需要考虑将它的哪一边视为栈的顶端。一旦确定了顶端,所有的操作就可以利用 append 和 pop 等列表方法来实现。

栈的实现,它假设列表的尾部是栈的顶端。当栈增长时(即进行 push 操作),新的元素会被添加到列表的尾部。pop 操作同样会修改这一端。

# 用 Python实现栈

class Stack:

def __init__(self):

self.items = []

def isEmpty(self):

return self.items == []

def push(self, item):

self.items.append(item)

def pop(self):

if not self.items:

return None

else:

return self.items.pop()

def peek(self):

if not self.items:

return None

else:

return self.items[-1]

def size(self):

return len(self.items)

值得注意的是,也可以选择将列表的头部作为栈的顶端。

不过在这种情况下,便无法直接使用 pop 方法和 append 方法,而必须要用 pop 方法和 insert 方法显式地访问下标为 0 的元素, 即列表中的第 1 个元素。

# 栈的另一种实现方式,选择将列表的头部作为栈的顶端

class Stack2:

def __init__(self):

self.items = []

def isEmpty(self):

return self.items == []

def push(self, item):

self.items.insert(0, item)

def pop(self):

return self.items.pop(0)

def peek(self):

return self.items[0]

def size(self):

return len(self.items)

改变抽象数据类型的实现却保留其逻辑特征,这种能力体现了抽象思想。

尽管上述两 种实现都可行,但是二者在性能方面肯定有差异:

append() 方法和 pop() 方法的时间复杂度都是 O(1)

这意味着不论栈中有多少个元素,第一种实现中的 push 操作和 pop 操作都会在恒定的时间内完成

第二种实现的性能则受制于栈中的元素个数

因为 insert(0) 和 pop(0) 的时间复杂度都是 O(n),元素越多就越慢

python实现栈_Python 栈相关推荐

  1. python定义栈_Python栈实现

    栈 下压栈(或简称栈)是一种基于后进后出的(LIFO)策咯的集合类型. 其中添加移除新项总发生在同一端.这一端通常称为"顶部".与顶部对应的端称为"底部".栈的 ...

  2. python中的队列和栈_python的队列和栈

    (一)队列和栈的区别 1.队列: 队列是一种特殊的线性表.其两头都有限制,插入只能在表的一端进行(只进不出),而删除只能在表的另一端进行(只出不进),允许删除的一端称为队尾(rear),允许插入的一端 ...

  3. python有栈吗_Python栈实现

    栈 下压栈(或简称栈)是一种基于后进后出的(LIFO)策咯的集合类型. 其中添加移除新项总发生在同一端.这一端通常称为"顶部".与顶部对应的端称为"底部".栈的 ...

  4. python定义栈_Python开发中栈的定义及用法详解

    前言 在Python开发中栈的设计和使用是常用到的,可以说是学习Python必须要掌握的一个技能,那么作为程序猿的你掌握了多少呢?掌握不熟练?没关系,跟着小编再来学习一下吧. 正文 栈是常用的数据结构 ...

  5. python 栈实现_Python 栈(后进先出)

    Python 栈,栈是含有一组对象的容器,支持快速后进先出(LIFO)的插入和删除操作.与列表或数组不同,栈通常不允许随机访问所包含的对象.插入和删除操作通常称为入栈(push)和出栈(pop). 现 ...

  6. python 栈和队列的区别_Python 栈与队列

    一.栈: #栈的实现,先进后出 class Stack(object): def __init__(self): self.__list = [] def push(self,item): self. ...

  7. eval?python顺序列表模拟栈实现计算器

    python顺序列表模拟栈实现计算器 借助list中的append和pop模拟顺序栈的入栈和出栈 instack = {'+':1,'-':1,'*':3,'/':3,'%':3,'(':6,')': ...

  8. Python数据结构学习笔记——栈

    目录 一.栈的定义和特性 (一)栈的定义 (二)栈的反转特性 二.实现分析步骤 三.栈的Python实现代码 四.栈的应用 (一)匹配圆括号 (二)匹配符号 (三)模2除法(十进制转二进制) (四)进 ...

  9. python中用函数设计栈的括号匹配问题_数据结构和算法(Python版):利用栈(Stack)实现括号的匹配问题...

    算法 数据结构 数据结构和算法(Python版):利用栈(Stack)实现括号的匹配问题 在平时写程序当中,我们会经常遇到程序当中括号的匹配问题,也就是在程序当中左括号的数量和右括号的数量必须相等.如 ...

最新文章

  1. SSL_TLS快速扫描器SSLScan常用命令集合大学霸IT达人
  2. python输出csv文件-更高效的Python CSV文件导出
  3. mysql 日志丢失_失而复得数据库日志文件丢失后的恢复
  4. 向json对象中添加数组
  5. mask属性是css3的吗_使用CSS3 mask(蒙版,遮罩)属性实现超酷按钮悬停动画
  6. mysql去重查询group_MySQL distinct 与 group by 去重(where/having)
  7. 吸血鬼数字—THINKING IN JAVA中一道习题
  8. Autorun.inf病毒和qhbpriAppInit_DLLs专杀
  9. ionic android n权限,ionic权限问题
  10. 详解POW工作量证明原理
  11. 关于vscode 中Live Server插件无法弹出Chrome浏览器问题
  12. 什么是back annotation
  13. 进销存仓库管理软件的应用场景与效益
  14. Plantuml类图用法
  15. 如何自动识别文字并提取?这三个方法教你搞定识别文字
  16. 锦锐单片机开发工具_锦锐触摸MCU 单片机方案开发
  17. Wannfly挑战赛20 A 染色
  18. android 大字体,大字体下载-大字体Big Font 3.21 安卓版-我游网
  19. 【jQuery】动效
  20. 品牌连锁企业如何突破技术壁垒对接分账系统?

热门文章

  1. Mysql 新增用户可访问指定数据库所有权限
  2. model里使用汉字页面崩掉
  3. iOS开发基础篇——介绍C++内置函数
  4. 代码更换ui图片_不同人眼中的UI设计师都是什么样的?
  5. 信息学奥赛一本通(2037:【例5.4】约瑟夫问题)
  6. 信息学奥赛一本通(1088:分离整数的各个数)
  7. 树的直径(51Nod-2602)
  8. 数学 —— 其他 —— 快速求逆平方根
  9. Pell数列(信息学奥赛一本通-T1189)
  10. 信息学奥赛一本通C++语言——1040:输出绝对值