博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python栈的两个应用
阅读量:7212 次
发布时间:2019-06-29

本文共 2827 字,大约阅读时间需要 9 分钟。

1、进制转换

#!/usr/bin/env python3# encoding: utf-8import Stack # As previously defineddef divide_by_2(dec_number):    rem_stack = Stack.Stack()    while dec_number > 0:        rem = dec_number % 2;        rem_stack.push(rem)        dec_number = dec_number // 2    bin_string = ""    while not rem_stack.is_empty():        bin_string = bin_string + str(rem_stack.pop())    return bin_stringdef base_converter(dec_number, base):    digits = "0123456789ABCDEF"    rem_stack = Stack.Stack()    while dec_number > 0:        rem = dec_number % base         rem_stack.push(rem)        dec_number = dec_number // base     new_string = ""    while not rem_stack.is_empty():        new_string = new_string + digits[rem_stack.pop()]    return new_stringif __name__ == "__main__":    print(divide_by_2(42))    print(base_converter(42, 2))    print(base_converter(25, 16))

  2、中缀表达式变后缀表达式

#!/usr/bin/env python3# encoding: utf-8import Stack # As previously defineddef infix_to_postfix(infix_expr):    prec = {}    prec["*"] = 3    prec["/"] = 3    prec["+"] = 2    prec["-"] = 2    prec["("] = 1    op_stack = Stack.Stack()    postfix_list = []    token_list = infix_expr.split()    #print(token_list)    for token in token_list:        if token in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" or token in "0123456789":            postfix_list.append(token)        elif token == '(':            op_stack.push(token)        elif token == ')':            top_token = op_stack.pop()            while top_token != '(':                postfix_list.append(top_token)                top_token = op_stack.pop()        else:            while (not op_stack.is_empty()) and (prec[op_stack.peek()] >= prec[token]):                postfix_list.append(op_stack.pop())            op_stack.push(token)    while not op_stack.is_empty():        postfix_list.append(op_stack.pop())    return "  ".join(postfix_list)if __name__ == "__main__":    print(infix_to_postfix("A * B + C * D"))    print(infix_to_postfix("( A + B ) * C - ( D - E ) * ( F + G )"))

  

 

  3、后缀表达式求值

#!/usr/bin/env python3# encoding: utf-8import Stackdef postfix_eval(postfix_expr):    operand_stack = Stack.Stack()    token_list = postfix_expr.split()    for token in token_list:        if token in '0123456789':            operand_stack.push(token)        else:            op2 = operand_stack.pop()            op1 = operand_stack.pop()            result = do_math(token, op1, op2)            operand_stack.push(result)    return operand_stack.pop()def do_math(token, op1, op2):    op1 = float(op1)    op2 = float(op2)    if token == '*':        return op1 * op2     elif token == '/':        return op1 /op2     elif token == '+':        return op1 + op2     else:        return op1 - op2if __name__ == "__main__":    print(postfix_eval('7 8 + 3 2 + /'))

  

 

转载于:https://www.cnblogs.com/zangkuo/p/8395472.html

你可能感兴趣的文章
Android实现ListView(2)
查看>>
Exchange邮箱的创建与配置
查看>>
Java ForkJoin 框架初探
查看>>
CentOS5.5下SVN部署文档
查看>>
java 7 Reflection详解(二),获取class对象信息
查看>>
数据重现之11.5.2:RAID5同步与异步的判断
查看>>
UML 10 种常见的域建模错误
查看>>
leetCode 6. ZigZag Conversion 字符串 (上传费劲)
查看>>
Spring(15)——基于注解的配置(二)
查看>>
SDS趋势之二:对象存储将替代文件存储
查看>>
Lync2013 升级错误总结2 Lync2013 PC和手机客户端登录无法验证
查看>>
在Solaris 下使用Os Watcher 监控Oracle
查看>>
Android进入商店并跳转到指定应用
查看>>
MessageQueue的使用方法(二)
查看>>
修改PPC下的移动运营商名称为中文
查看>>
mysql dba系统学习(2)了解mysql的源码目录及源文件
查看>>
GitHub 版本控制 项目托管 04 创建GitHub远程仓库
查看>>
Java实现MD5加密
查看>>
oracle日常维护(不断更新)
查看>>
server 2008 跨进新的平台(二)
查看>>