python数据结构学习笔记-2016-11-02-01-栈的应用

        7.3 应用

        7.3.1 括号匹配

        无论是在计算表达式还是在C++代码中,都会碰到括号匹配问题。如以下的C++代码:

int sumList(int theList[], int size)
{
  int sum = 0;
  int i = 0;
  while(i < size) {
    sum += theList[i];
    i += 1;
  }
  return sum;
}
        括号匹配问题可以使用栈来解决。当一行一行的检查C++代码时,碰到"{"、“[”、“(”就将其压入栈中,碰到"}”、“]”、“)”就将栈顶弹出,如果括号都能匹配正确,则栈最后会变成空栈。如:


        如果括号没有匹配成功,则出现以下情况:



         下面是检查C++代码中括号匹配问题的函数
#-*-coding: utf-8-*-

# 栈的应用之一:括号匹配

from lliststack import Stack

def isValidSource(srcfile):
    s =Stack()
    for line in srcfile:
        for token in line:
            if token in "{[(":
                s.push(token)
            elif token in "}[)":
                if s.isEmpty():
                    return False
                else:
                    left = s.pop()
                    if (token == "}" and left != "{") or (token == "]" and left != "[") or (token == ")" and left != "("):
                        return False
    
    return s.isEmpty()

        7.3.2 表达式的计算
        算术表达式有三种表示形式:
  • 中缀表示(infix notation):<操作数> <操作符> <操作数>,例如 A + B;
  • 前缀表示(prefix notation):<操作符> <操作数> <操作数>,例如 + A B;
  • 后缀表示(postfix notation):<操作数> <操作数> <操作符>,例如 A B +。
        我们通常用的都是中缀表示,前缀表示和后缀表示的优势在于其固定不变的特性,不需要括号来表示运算的优先级,编译程序一般采用后缀表示求解表达式的值。
       
        后缀表示求值算法
        使用后缀表示求值,可使用栈来储存操作数或者变量,直到遇到操作符时,将两个操作数弹出,计算值,再压入栈中,直至最后求出表达式的值,如果表达式没有问题,那么在最后的栈中,只会有一个数剩余,即表达式的值。如

               如果表达式有问题,如

       
          出现操作数多余的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值