前言
在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開發中的棧有了一定的瞭解了?平時還得靠小夥伴們的多多練習學以致用啊。