Python没有内置栈的数据结构,但是可以通过list来实现一个栈
Python中的栈
Python中的数据结构list可以实现栈的操作,无需单独实现一个栈
list接口 | 对应栈操作描述 |
---|---|
s = [] | 创建一个栈 |
s.append(x) | 相当于push,向栈内添加一个元素 |
s.pop() | 弹出(删除)栈顶元素 |
not s | 判断栈是否为空 |
len(s) | 判断栈的长度 |
s(-1) | 相当于top,获取栈顶元素 |
算法实例
1. 括号匹配
假如表达式中允许包含三中括号()、[]、{},其嵌套顺序是任意的,例如:
正确的格式:
{()[()]},[{({})}]
错误的格式:
[(]),[()),(()}
编写一个函数,判断一个表达式字符串,括号匹配是否正确
思路:
- 创建一个空栈,用来存储尚未找到匹配的左括号
- 遍历字符串,遇到一个左括号则入栈,遇到一个右括号,则弹出栈顶元素,比较是否匹配
- 在第二步骤过程中,如果空栈情况下遇到右括号,说明缺少左括号,不匹配
- 在第二步骤遍历结束时,栈不为空,说明缺少右括号,不匹配
算法代码:
1 | #!/usr/bin/env Python |
2. 迷宫问题
题目:
用一个二维数组表示一个简单的迷宫,用0表示通路,用1表示阻断,老鼠在每个点上可以移动相邻的东南西北四个点,设计一个算法,模拟老鼠走迷宫,找到从入口到出口的一条路径。
迷宫如图所示,出去的正确线路如图中的红线所示:
思路:
- 用一个栈来记录老鼠从入口到出口的路径
- 走到某点后,将该点左边压栈,并把该点值置为1,表示走过了;
- 从临近的四个点中可到达的点中任意选取一个,走到该点;
- 如果在到达某点后临近的4个点都不走,说明已经走入死胡同,此时退栈,退回一步尝试其他点;
- 反复执行第二、三、四步骤直到找到出口;
算法代码:
1 | #!/usr/bin/env Python |
3. 后缀表达式
题目:
计算一个表达式时,编译器通常使用后缀表达式。编写程序实现后缀表达式求值函数。
思路:
- 建立一个栈来存储待计算的操作数;
- 遍历字符串,遇到操作数则压入栈中,遇到操作符号则出栈操作数(n次),进行相应的计算,计算结果是新的操作数压回栈中,等待计算
- 按上述过程,遍历完整个表达式,栈中只剩下最终结果;
算法代码:
1 | #!/usr/bin/env Python |