- 基础定义
什么是栈:栈是一种有次序的数据项集合。在栈中,数据项的加入和移除都仅仅发生在同一端,这一端叫栈顶(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