栈
定义
- 一个数据集合,只能在一端进行插入或删除的列表
- 特点:后进先出
- 栈的概念:栈顶,栈底
- 栈的基本操作
- 进栈(压栈):push
- 出栈:pop
- 取栈顶:gettop
进栈:li.append
出栈:li.pop
取栈顶:li[-1]
class Stack():
def __init__(self):
self.stack=[]
def push(self,element):
self.stack.append(element)
def pop(self):
return self.stack.pop()
def gettop(self):
if len(self.stack) > 0:
return self.stack[-1]
else:
return None
stack = Stack()
stack.push(1)
stack.push(2)
stack.push(3)
stack.push(4)
print(stack.pop())
print(stack.pop())
print(stack.gettop())
栈的应用——括号匹配问题
例如:
- ()()[]{} —— 匹配
- ([{()}]) ——匹配
- []( —— 不匹配
- [(]) —— 不匹配
巧妙应用进栈出栈
字符串读完了且栈是空的——括号匹配
class Stack():
def __init__(self):
self.stack=[]
def push(self,element):
self.stack.append(element)
def pop(self):
return self.stack.pop()
def gettop(self):
if len(self.stack) > 0:
return self.stack[-1]
else:
return None
def brace_match(s):
match = {'}':'{',')':'(',']':'['}
list = Stack()
for ch in s:
if ch in {'(','[','{'}:
list.push(ch)
else:
if len(list.stack) == 0:
return False
else:
if list.gettop() == match[ch]:
list.pop()
else:
return False
if len(list.stack) != 0:
return False
else:
return True
print(brace_match('[](){}'))
print(brace_match('[((]'))