python中栈_Python中的栈
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中的栈相关推荐
- python什么是堆什么是栈_python中堆和栈_Python小知识00002
原博文 2019-05-15 09:48 − 变量位于栈 对象位于堆 ... 0 739 相关推荐 2019-12-03 17:11 − 目录 Python 全栈之路 一. Python 1. Pyt ...
- python递归函数特点_python中对递归函数的理解
在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. 举个例子,我们来计算阶乘n! = 1 * 2 * 3 * ... * n,用函数fact(n)表示,可以看出: f ...
- 如何用python生成软件_python中的生成器函数是如何工作的?
1. python中的普通函数是怎么运行的? 当一个python函数在执行时,它会在相应的python栈帧上运行,栈帧表示程序运行时函数调用栈中的某一帧.想要获得某个函数相关的栈帧,则必须在调用这个函 ...
- python全栈和java全栈_Python是全栈式开发语言吗?原因竟是这样!
Python 的排名从去年开始就借助人工智能持续上升,现在它已经成为了第一名.但排在前四名的语言 Python.C.Java 和 C++都拥有广大的用户群体,并且他们的用户总量也十分相近.实际上,Di ...
- python圆形生成器_python中的生成器
什么是生成器? 生成器是一个包含了特殊关键字yield的函数.当被调用的时候,生成器函数返回一个生成器.可以使用send,throw,close方法让生成器和外界交互. 生成器也是迭代器,但是它不仅仅 ...
- python zipfile教程_Python中的zipfile模块使用详解
zip文件格式是通用的文档压缩标准,在ziplib模块中,使用ZipFile类来操作zip文件,下面具体介绍一下: class zipfile.ZipFile(file[, mode[, compre ...
- python io模块_python中的StringIO模块
原博文 2015-10-23 15:21 − # python中的StringIO模块 标签:python StringIO --- > 此模块主要用于在内存缓冲区中读写数据.模块是用类编写的, ...
- python map用法_Python中ChainMap的一种实用用法
Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 简而言之ChainMap:将多个字典视为一个,解锁Python超能力. Python标准库中的集合模块包含 ...
- python 两个[]_Python中的两个测试工具
♚ 作者:jclian,喜欢算法,热爱分享,希望能结交更多志同道合的朋友,一起在学习Python的道路上走得更远! 当我们在写程序的时候,我们需要通过测试来验证程序是否出错或者存在问题,但是,编写大量 ...
最新文章
- 我们如何从VC++开始“编程”?
- java allocate_Java中volatile关键字的最全总结
- SignalR2结合ujtopo实现拓扑图动态变化
- 不同格式的json解析
- Nginx实现HTTP反向代理配置
- 学fpga(组合逻辑和时序逻辑)
- windows文件迁移到linux,从Windows到Linux迁移之文件服务器(Samba和AD完美结合)
- DFA和NFA的区别
- IHookHelper的用法
- Tomcat--安装与部署(一)
- Hadoop 删除节点步骤
- javaweb框架和其他知识点总结
- [状压dp] 玉米田(状压dp)
- python视频教程全集免费-Python免费视频教程
- 基于SSH的网上购书系统设计与实现
- java的pdf转永中_永中PDF转Word,你值得拥有!
- Android内存优化深入解析
- Vmware Workstation Pro初级使用
- Elasticsearch系列——(1.1)倒排索引原理
- 腾讯云短信发送接口类
热门文章
- elasticsearch(7)聚合统计-分组聚合
- Uncaught TypeError: Cannot read property 'setAttribute' of null
- 目标跟踪数据集OTB、VOT下载
- 使用Java泛型实现快速排序(快排,Quicksort)
- 特征点检测学习_2(surf算法)
- python和对象复习_【Python复习巩固 Day4】面向对象编程
- Windows下Appium环境搭建(java版)
- Git回滚代码到某个commit
- linux -- framebuff驱动总结
- html怎么让方块自动旋转,纯CSS3做的的3D旋转方块