前言
在Python开发中栈的设计和使用是常用到的,可以说是学习Python必须要掌握的一个技能,那么作为程序猿的你掌握了多少呢?掌握不熟练?没关系,跟着小编再来学习一下吧。
正文
栈是常用的数据结构。尽管一般的面试里不会让直接写一个栈的实现,不过跟栈有关的编程题很多,今天就遇到一个。
首先看一下栈的定义。栈是一个集合,具有下面的2种基本操作
push: 把元素加入集合,这个过程我们叫做压入
pop: 把最后加入集合的元素从集合中移除,这个过程我们叫做推出
所以栈在移除元素的时候是遵循LIFO(last in, first out),也就是后进先出的原则的。
直接设计代码:class stack(object):
"""docstring for stack"""
def __init__(self, data):
self.data = []
def push(self,elm):
self.data.append(elm)
def pop(self):
self.data.pop()
def len(self):
return len(self.data)
def is_empty(self):
return len(self)== 0
题目:请使用代码实现判断表达式中小括号是否匹配的功能。如果匹配返回True,否则返回False。比如(x * (y +z)) +10中,小括号是匹配的。而(a + b) * )c - d中小括号是不匹配的。
遍历表达式每一个字符
如左括号,将左括号压入栈
如右括号,则判断栈是否为空,不为空则推出,为空就证明右括号没有匹配的项目,返回False
遍历结束之后判断栈是否为空,不为空则返回False,否则返回True
完整代码实现如下
def match_parentthese(erp):
data = stack()
for ele in erp:
if ele == "(":
data.push(ele)
elif ele == ")":
if data.is_empty():
return False
break
else:
data.pop()
else:
pass
if data.is_empty():
return True
else:
return False
结尾
通过本文各位小盆友们是不是对于Python开发中的栈有了一定的了解了?平时还得靠小伙伴们的多多练习学以致用啊。