只允许在一端进行插入或删除数据元素的有限序列
栈顶:进行插入和删除的那一端;栈底:栈顶的另一端。
栈是一种“先进后出”的一种数据结构,有压栈出栈两种操作方式
重要概念:
入栈 push: 入栈也称压栈, 指的是栈的插入操作, 在栈顶位置插入新的数据元素.
出栈 pop: 出栈也称弹栈, 指的是栈的删除操作, 删除栈顶位置的数据元素
代码如下:
class Stack:
def __init__(self):
self.items=[]
#判断是否为空
def is_empty(self):
return self.items==[]
#向栈中添加一个元素
def push(self,item):
self.items.append(item)
#弹出一个元素
def pop(self):
return self.items.pop()
#在栈中查找一个元素
def peek(self):
if len(self.items):
return self.items[len(self.items)-1]
return None
#查找栈中的元素
def size(self):
return len(self.items)
#打印栈中的元素
def print_stack(Stack):
print('{:^11}'.format('栈顶'))
for i in range (len(Stack.items)):
print('{:^11}'.format(Stack.items[len(Stack.items)-i-1]))
print('{:^11}'.format('栈低'))
a=Stack()
a.push('a')
a.push('b')
a.push('c')
print_stack(a)
实例:
括号匹配
加入表达式中(),[ ] , { } 其嵌套顺序是任意的
例如:
正确的表达: {()[ () ] } , [ { ( {}) } ]
错误的表达:{ [ ) ] } ,[ { } ) }
def is_brackets_corrent(str):
stack=Stack()
for i in range(len(str)):
if str[i] == '(' or str[i] == '[' or str[i] == '{':
#把它们压进栈
stack.push(str[i])
continue
#获得栈顶元素
top =stack.peek()
if str [i] == ')':
if top != '(':
return False
stack.pop()
if str[i] == ']':
if top != '[':
return False
stack.pop()
if str[i] == '}':
if top != '{':
return False
stack.pop()
return stack.is_empty()
print(is_brackets_corrent(']]'))
print(is_brackets_corrent('{()[()]}'))
print(is_brackets_corrent('{()[({})]}'))