题目描述:给定一个包含正整数、加(+)、减(-)、乘(*)、除(/)的算数表达式(括号除外),计算其结果。表达式仅包含非负整数,+,- ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。
示例:
例1:
输入: "3+2*2"
输出: 7
例2:
输入: " 3/2 "
输出: 1
例3:
输入: " 3+5 / 2 "
输出: 5
解题思路:双栈计算。创建两个栈结构,分别用于保存数字和运算符,遍历字符串时,遇到运算符,将当前运算符与运算符栈的栈顶进行优先级比较,如果栈顶运算符优先级低于当前运算符,将数字和当前运算符直接入栈,如果栈顶运算符优先级高于或者等于当前运算符,取出数字栈和运算符栈栈顶数据,结合num保存的临时数据进行运算,运算结果依然保存到num,取出运算符栈新的栈顶数据,进行以上逻辑比较及运算或者直接入栈。最后依次取出两个栈中的数据进行运算,返回运算结果。
特别注意:由于一次计算后,紧接着从运算符栈出栈了一个数据,如果比较结果是无需继续计算,直接入栈,当该数据不为空时,记得将其重新入栈。
解题开发语言:Swift
struct ArrayStack {
private var listData: [String]!
private var n: Int!
private var count: Int!
public var stackTop: String? {
if count == 0 {
return nil
}
return listData[count-1]
}
init(num: Int) {
listData = [String](repeating: "", count: num)
n = num
count = 0
}
public mutating func push(item: String) -> Bool {
if count == n {
resize()
}
listData[count] = item
count += 1
return true
}
public mutating func pop() -> String? {
if count == 0 {