Python中的栈

什么是栈

在数据结构中栈和队列可以理解为一种容器。它门也是一种简单的缓存结构,只支持数据的存储和访问。栈中的元素之间相互没有任何和的具体关系,只有时间的相互顺序。栈的相关操作包括数据元素的存入,访问删除等。

时间顺序特点

栈保证元素后进先出(Last in First Out,LIFO)。

使用环境

1、计算过程分为一些顺序进行的步骤

2、计算中执行某些步骤会不断产生一些后面可能需要的中间数据

3、产生的数据不能立即使用,但需要在将来使用。

4、需要保存的数据在个数上不能事先确定

栈的实现

一、栈的列表实现

class Stack(object):

def __init__(self):

# 创建空列表实现栈

self.__list = []

def is_empty(self):

# 判断是否为空

return self.__list == []

def push(self,item):

# 压栈,添加元素

self.__list.append(item)

def pop(self):

# 弹栈,弹出最后压入栈的元素

if self.is_empty():

return

else:

return self.__list.pop()

def top(self):

# 取最后压入栈的元素

if self.is_empty():

return

else:

return self.__list[-1]

二、栈的链表实现

顺序表实现扩展存储空间操作复杂,且需要大块的存储空间;采用链表实现在这两个问题上有优势,但是链表实现更多的依赖与解释器的存储管理,会带来操作开销。

class Node(object):

"""节点的实现"""

def __init__(self,elem):

self.elem = elem

self.next = None

class Stack(object):

def __init__(self):

""" 初始化,链表头head"""

self.__head = None

def is_empty(self):

""" 初始化,链表头head"""

return self.__head is None

def push(self,item):

""" 压栈"""

node = Node(item)

node.next = self.__head

self.__head = node

def pop(self):

""" 弹栈"""

if self.is_empty():

return

else:

p = self.__head

self.__head = p.next

return p.elem

栈的应用

1、倒序输出一组元素

把元素存入栈,在顺序取出

stack = Stack()

for x in List:

stack.push(x)

# 翻转后的列表(新列表)

reverse_list = []

while not stack.is_empty():

# 判断,若不为空就取出元素加入的新列表中

reverse_list.append(stack.pop())

2、括号匹配问题

1、顺序扫描被检查字符串中的字符

2、跳过无关的字符

3、遇到开括号压入栈

4、遇到闭括号时与弹栈元素匹配,检查是否匹配

5、匹配成功继续,否则匹配失败

class Check(object):

def __init__(self, text):

self.text = text

self.parens = "[](){}"

self.open_parens = "[{("

self.opposite = {"}": "{", "]": "[", ")": "("}

self.len_text = len(text)

self.index = 0

def parent(self):

while True:

while self.index < self.len_text and self.text[self.index] not in self.parens:

self.index += 1

if self.index >= self.len_text:

return

yield self.index, self.text[self.index]

self.index += 1

def check_parens(self):

# 实例化一个栈

stack = Stack()

for index, str in self.parent():

if str in self.open_parens:

# 压栈

stack.push(str)

elif self.opposite[str] != stack.pop():

print "失败"

else:

pass

print "匹配结束"

if __name__ == "__main__":

# 有待改进

check = Check("{{))")

check.check_parens()

待续

新手上路,道路千万条,安全第一条

python中栈_Python中的栈相关推荐

  1. python什么是堆什么是栈_python中堆和栈_Python小知识00002

    原博文 2019-05-15 09:48 − 变量位于栈 对象位于堆 ... 0 739 相关推荐 2019-12-03 17:11 − 目录 Python 全栈之路 一. Python 1. Pyt ...

  2. python递归函数特点_python中对递归函数的理解

    在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. 举个例子,我们来计算阶乘n! = 1 * 2 * 3 * ... * n,用函数fact(n)表示,可以看出: f ...

  3. 如何用python生成软件_python中的生成器函数是如何工作的?

    1. python中的普通函数是怎么运行的? 当一个python函数在执行时,它会在相应的python栈帧上运行,栈帧表示程序运行时函数调用栈中的某一帧.想要获得某个函数相关的栈帧,则必须在调用这个函 ...

  4. python全栈和java全栈_Python是全栈式开发语言吗?原因竟是这样!

    Python 的排名从去年开始就借助人工智能持续上升,现在它已经成为了第一名.但排在前四名的语言 Python.C.Java 和 C++都拥有广大的用户群体,并且他们的用户总量也十分相近.实际上,Di ...

  5. python圆形生成器_python中的生成器

    什么是生成器? 生成器是一个包含了特殊关键字yield的函数.当被调用的时候,生成器函数返回一个生成器.可以使用send,throw,close方法让生成器和外界交互. 生成器也是迭代器,但是它不仅仅 ...

  6. python zipfile教程_Python中的zipfile模块使用详解

    zip文件格式是通用的文档压缩标准,在ziplib模块中,使用ZipFile类来操作zip文件,下面具体介绍一下: class zipfile.ZipFile(file[, mode[, compre ...

  7. python io模块_python中的StringIO模块

    原博文 2015-10-23 15:21 − # python中的StringIO模块 标签:python StringIO --- > 此模块主要用于在内存缓冲区中读写数据.模块是用类编写的, ...

  8. python map用法_Python中ChainMap的一种实用用法

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 简而言之ChainMap:将多个字典视为一个,解锁Python超能力. Python标准库中的集合模块包含 ...

  9. python 两个[]_Python中的两个测试工具

    ♚ 作者:jclian,喜欢算法,热爱分享,希望能结交更多志同道合的朋友,一起在学习Python的道路上走得更远! 当我们在写程序的时候,我们需要通过测试来验证程序是否出错或者存在问题,但是,编写大量 ...

最新文章

  1. 我们如何从VC++开始“编程”?
  2. java allocate_Java中volatile关键字的最全总结
  3. SignalR2结合ujtopo实现拓扑图动态变化
  4. 不同格式的json解析
  5. Nginx实现HTTP反向代理配置
  6. 学fpga(组合逻辑和时序逻辑)
  7. windows文件迁移到linux,从Windows到Linux迁移之文件服务器(Samba和AD完美结合)
  8. DFA和NFA的区别
  9. IHookHelper的用法
  10. Tomcat--安装与部署(一)
  11. Hadoop 删除节点步骤
  12. javaweb框架和其他知识点总结
  13. [状压dp] 玉米田(状压dp)
  14. python视频教程全集免费-Python免费视频教程
  15. 基于SSH的网上购书系统设计与实现
  16. java的pdf转永中_永中PDF转Word,你值得拥有!
  17. Android内存优化深入解析
  18. Vmware Workstation Pro初级使用
  19. Elasticsearch系列——(1.1)倒排索引原理
  20. 腾讯云短信发送接口类

热门文章

  1. elasticsearch(7)聚合统计-分组聚合
  2. Uncaught TypeError: Cannot read property 'setAttribute' of null
  3. 目标跟踪数据集OTB、VOT下载
  4. 使用Java泛型实现快速排序(快排,Quicksort)
  5. 特征点检测学习_2(surf算法)
  6. python和对象复习_【Python复习巩固 Day4】面向对象编程
  7. Windows下Appium环境搭建(java版)
  8. Git回滚代码到某个commit
  9. linux -- framebuff驱动总结
  10. html怎么让方块自动旋转,纯CSS3做的的3D旋转方块