栈的应用,括号匹配,后缀表达式计算,有趣的汉诺塔--python实现
来源:互联网 发布:禅道数据库配置 编辑:程序博客网 时间:2024/05/16 06:08
三个例子很简单,都来自数据结构课本上的例子。但简单才好玩嘛。
第一个:括号匹配,就是找左括号有没有相匹配的右括号,反之亦然。
代码:
# -*- coding:utf-8 -*-# 栈的应用:括号匹配def MatchPairs(str):arr = list(s)stack = []for x in range(0, len(arr)):if arr[x] == "(":stack.append(x)# print(stack)if arr[x] == ")":if len(stack) != 0:print("位置", stack.pop(), "的左括号与位置", x, "的右括号匹配!")else:print("位置", x, "的右括号没有左括号与之匹配!")while len(stack) != 0:print("位置", stack.pop(), "的左括号没有与之匹配的右括号!")# 测试s = "(a*(b-c)-d))"MatchPairs(s)值得注意的:字符串List()方法,他能将字符串切割成字符用数组存起来。
第二个:后缀表达式计算,计算机一般都是将我们输入的中缀表达式转换为后缀表达式,然后进行计算的。
具体怎么做:
遍历表达式,遇到数字用栈存起来,遇到计算符号就弹出两个数字进行计算,然后将结果压入栈。继续遍历。
最后栈中只有一个数字就是表达式的结果。
代码:
# 栈的应用:后缀表达式的计算def calculator(str):arr = list(str)stack = []for x in range(0, len(arr)):if arr[x] in ("+","-","*","/"):left = float(stack.pop())right = float(stack.pop())if arr[x] == "+":stack.append(left+right)if arr[x] == "-":stack.append(left-right)if arr[x] == "*":stack.append(left*right)if arr[x] == "/":stack.append(left/right)else:stack.append(arr[x])print("表达式结果是:", stack[0]) # 测试s = "1234-*+56/-"calculator(s)
值得注意的是:纯数字字符串转换为浮点型方法:float()方法 ,十分好用。
在python3.x中已经不区分整形与长整型了,理论上可以是无穷大。
第三个:有趣的汉诺塔。
有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个移动到柱子C上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方。
思路:
第一步:将n-1个盘子从A移动到B(这是递归),不要深究怎么移动到B,递归解决。
第二步,将A上剩下的最后一个最大的盘子从A移动到C。
第三步:将B上的n-1个盘子从B移动到C(这儿递归)。
代码:
# 递归与栈:汉诺塔问题。def Hanoi(n, a, b, c):count = 1if n == 1:print(a, "-->", c)else: Hanoi(n-1, a, c, b) # 这三句的顺序很重要,思路要清楚。首先,要将n个盘子从A移动去C,那么 print(a, "-->", c) # 第一步:将n-1个盘子从A移动到B(这是递归)。第二步,将剩下的最后一个最大的盘子从A移动到C. Hanoi(n-1, b, a, c) # 第三步:将B上的n-1个盘子从B移动到C(这儿递归)。所以代码才这么写的。# 测试Hanoi(3,'A','B','C')对问题本身如果有不清楚,直接百度百科。
阅读全文
0 0
- 栈的应用,括号匹配,后缀表达式计算,有趣的汉诺塔--python实现
- 栈的应用Ⅰ--后缀表达式 括号匹配
- C语言实现括号匹配,中缀表达式转后缀表达式并计算的算法
- 栈的应用(括号匹配、后缀表式计算、中缀转后缀)
- (1.2.2.1)栈和队列的应用:数制转换、括号匹配、后缀表达式求解,中缀表达式求解、双栈实现队列,min函数栈
- 2. 栈的两个应用:括号匹配和表达式的计算。
- 栈应用 - 后缀表达式的计算
- 后缀表达式计算-栈的应用
- C语言实现括号匹配,中缀表达式转后缀表达式并计算具体代码实现
- 栈实现后缀表达式的计算
- 栈-----括号匹配+表达式计算
- 【数据结构】用栈实现的简单计算器(先转换为后缀表达式、可以计算带括号的)
- 数据结构-栈的应用-算术表达式小括号匹配
- 栈的应用(括号匹配、逆波兰表达式)
- C++实现算术表达式的括号匹配
- 栈的应用:括号匹配
- 括号匹配---栈的应用
- 栈的应用---括号匹配
- 购物车加减(bootsrap)
- x86汇编从实模式到保护模式 记录思考和习题答案
- Given an array of non-negative integers, you are initially positioned at the first index of the arra
- 慢查日志(二)
- 为什么要使用SLF4J而不是Log4J
- 栈的应用,括号匹配,后缀表达式计算,有趣的汉诺塔--python实现
- PL/SQL之二 异常处理
- [Haskell] CodeWars|Sum of Digits
- Redis Jedis 之 Sharded 源码分析
- MySQL查询效率问题
- 二值图像孔洞填充
- C++中容易忘的知识点——list和forward_list(四)
- 常见调试错误操作集合
- (crm笔记2-3)关于模型驱动获取jsp对象