定义
栈又名堆栈,可存入数据元素、访问元素、删除元素,其特点是只能在一端进行数据的输入(入栈)和输出(出栈)。
由于栈数据结构只允许在一端进行操作,因而按照后进先出(LIFO, Last In First Out)的原理运作。
python 实现栈结构
class Stack(object):
"""
堆栈实现
"""
def __init__(self):
self.item = []
def is_empty(self):
"""
判断栈是否为空
"""
return self.item == []
def push(self, item):
"""
添加元素
"""
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)
if __name__ == '__main__':
s = Stack()
print("当前栈是否为空", s.is_empty())
print("当前栈大小:", s.size())
s.push(1)
s.push(96)
s.push(55)
print("当前栈顶元素为:", s.peek())
print("出栈元素为:", s.pop())
print("当前栈顶元素为:", s.peek())
print("当前栈是否为空", s.is_empty())
print("当前栈大小:", s.size())
结果
当前栈是否为空 True
当前栈大小: 0
当前栈顶元素为: 55
出栈元素为: 55
当前栈顶元素为: 96
当前栈是否为空 False
当前栈大小: 2
经典算法
括号匹配:字符串中有括号”()[]{}”,设计算法,判断该字符串是否有效
括号必须以正确的顺序配对,如:“()”、“()[]”是有效的,但“([)]”无效
解题思路:使用栈来实现。右括号总是与最近的左括号匹配 栈的后进先出的特点。
从左往右遍历字符串,遇到左括号就入栈,遇到右括号时,就出栈一个元素与其配对。
当栈为空时,遇到右括号,则此右括号无与之匹配的左括号。
当最终右括号匹配完毕后栈内还有剩余元素,则表明这些位置的左括号没有与之匹配的右括号。
代码实现
def parentheses_match(value):
stack = []
for parentheses in value:
# 匹配到左括号入栈
if parentheses == '(' or parentheses == '{' or parentheses == '[':
stack.append(parentheses)
elif parentheses == ')' or parentheses == '}' or parentheses == ']':
if stack == []:
return False
stack.pop()
return stack == []
examples = ['{}{}()[()]','{(}(())','{[()]}']
for example in examples:
print(parentheses_match(example))
结果
True
False
True