- 基础定义
什么是栈:栈是一种有次序的数据项集合。在栈中,数据项的加入和移除都仅仅发生在同一端,这一端叫栈顶(top),没有操作的另一端叫栈底(base)。
特性:后进先出,先进后出
- 栈的基本操作
这里需要知道在python里面是没有栈的,但是我们可以模拟一个栈。
首先我们需要定义的一些栈的基本操作:
Stack() | 创建一个空栈,不包含任何数据项 |
push(item) | 将item加入栈顶,无返回值 |
pop() | 将栈顶数据项移除,并返回,栈被修改 |
peek() | 查看栈顶数据项,返回栈顶数据项但不移除,且不修改栈 |
isEmpty() | 返回栈是否为空 |
size() | 返回栈中有多少个数据项 |
这里,我们可以用list类型实现一个栈的操作:
1 class Stack: 2 ''' 3 自己定义的一个栈 4 栈顶是尾端,也可以将栈顶设为尾端 5 ''' 6 def __init__(self): 7 self.items =[] 8 def isEmpty(self): 9 return self.items==[] 10 def push(self,item): 11 self.items.append(item) 12 def pop(self): 13 self.items.pop() 14 def peek(self): 15 return self.items[len(self.items)-1] 16 def size(self): 17 return len(self.items) 18 if __name__ == '__main__': 19 s = Stack() 20 s.push('1') 21 s.push('a') 22 print(s.isEmpty()) 23 print(s.peek()) 24 print(s.size())
1 [out]: 2 False 3 a 4 2 5 6 Process finished with exit code 0
- 栈的应用
- 简单括号匹配
任务:对括号左右对应匹配,构造一个括号匹配算法。从左到右扫描括号,最新打开的左括号,应该匹配最先遇到的右括号
流程图:
代码:
1 from Stack import Stack 2 def parChecker(symbolString): 3 s = Stack() 4 balanced = True 5 index = 0 6 while index < len(symbolString) and balanced: 7 symbol = symbolString[index] 8 if symbol == "(": 9 s.push(symbol) 10 else: 11 if s.isEmpty(): 12 balanced = False 13 else: 14 s.pop() 15 index = index + 1 16 if balanced and s.isEmpty(): 17 return True 18 else: 19 return False 20 print(parChecker('((()))))')) 21 print(parChecker('(((())))'))
[OUT]:1 False 2 True 3 4 Process finished with exit code 0
但是在实际应用中,括号往往比较复杂,比如{}()[]
参考:https://www.bilibili.com/video/BV1QJ411w7bB?p=17
来源:https://www.cnblogs.com/yeshengCqupt/p/12571924.html