'''
栈作为计算机基本数据结构之一,是经常用到的
遵循“先进后出”的原则
下面是栈的实现形式
这个是让栈 底部作为 初值
'''
class stack:
#付给一个初值
def __init__(self):
self.item=[]
#检验是否为空
def isempty(self):
return self.item==[]
#进栈操作
def push(self,item):
return self.item.append(item)
#出栈操作
def pop(self):
return self.item.pop()
#栈顶部元素
def peek(self):
return self.item[len(self.item)-1]
#栈大小
def size(self):
return len(self.item)
再来看一个应用:
'''
匹配括号
比如像这样的一个
symbolstring=
((())(()))
要做到第一个( 与最后一个 )相匹配
中间的( 与相邻的) 要匹配
这样就想到了栈的思想:
一遇到( ,就进栈 ;然后遇到 ),就让( 出栈
直到最后 如果 ( 的个数 与 ) 的个数相对应 ,那么stack()应该最后为空
'''
from pythonds.basic import stack
def parcheck(symbolstring):
#定义几个初值:index是 symbolstring 的索引 ,负责一个个取出symbolstring 的符号
#定义一个初值 balanced =True
#创建一个栈
index=0
balanced=True
s=stack()
while index<=len(symbolstring) and balanced:
symbol=symbolstring[index]
#如果是左括号就进栈
if symbol =='(':
s.push(symbol)
#反之,遇到的就是右括号
#首先判断是不是栈空了,栈空了 balanced =FALSE 退出循环
#如果不是,就就行 pop 出栈
else:
if s.isEmpty():
balanced =False
else:
s.pop()
#指针继续右移,取symbolstring 的下一个符号
index+=1
#最后 再判断一下 如果balanced =True 并且栈也空了
#函数最后返回 TRUE
#否则返回FALSE
if balanced and s.isEmpty():
return True
else:
return False