这个系列就是写给自己看看,看看自己能坚持多久,并且把今天的学习内容复习一下
- stack:堆栈(英语:stack)又称为栈或堆叠,是计算机科学中的一种抽象数据类型,只允许在有序的线性数据集合的一端(称为堆栈顶端,英语:top)进行加入数据(英语:push)和移除数据(英语:pop)的运算。因而按照后进先出(LIFO, Last In First Out)的原理运作。[1]
- 关于stack在python中的实现:使用类来定义栈
- 栈中的函数:
- isEmpty() 判断栈是否为空
- push()把元素入栈
- pop()把最后一个元素删除并返回
- peek()显示最后一个元素(栈顶)
- size()返回栈的大小
class Stack:
def __init__(self):
self.items = []
def isEmpty(self):
return self.items == []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[-1]
def size(self):
return len(self.items)
栈的应用#1
- 栈有后进先出的特点,因此可以用来匹配括号,算出是否对称
- 后进入的括号会先与后面的括号匹配,符合栈的特点
import stack
def parenthesis_matching(parenthesis):
s = Stack()
index = 0
while index < len(parenthesis):
i = parenthesis[index]
if i == '(':
s.push(i)
else:
if s.isEmpty() is True:
return False
else:
s.pop()
index += 1
if s.isEmpty() is False:
return False
else:
return True
print(parenthesis_matching('(()())'))
运行结果为True
关于复杂括号的匹配
- 需要从括号的判断处进行更改:i要属于({[之一即可入栈,判断是否匹配时使用新函数match()
def match(open, close):
left = '({['
right = ')}]'
return left.index(open) == right.index(close)
#代码主体
def complex_parent_match(parent):
s = Stack()
balanced = True
index = 0
while index < len(parent) and balanced:
i = parent[index]
if i in '([{':
s.push(i)
else:
if s.isEmpty() is True:
balanced = False
else:
if match(s.peek(), i):
s.pop()
else:
balanced = False
index += 1
if s.isEmpty() is True and balanced:
return True
else:
return False
print(complex_parent_match('([]{})'))
运行结果为True
明天会继续更新一部分数学竞赛内容,希望不会鸽
参考
- ^https://zh.wikipedia.org/wiki/%E5%A0%86%E6%A0%88