棧的應用 四則運算表示式求值

2021-08-20 12:16:19 字數 1798 閱讀 7256

若要計算機具有處理標準表示式的能力,最重要的有兩步:

1、將中綴表示式轉化為字尾表示式

2、將字尾表示式進行運算得出結果

中綴表示式:標準四則運算表示式,即「8+(3-2*4)*10+2/2」

字尾表示式:所有的符號都是要在運算數字的後面出現。例:

將「8+(3-2*4)*10+2/2」轉為字尾表示式為:「8 3 2 4 * - 10 * + 2 2 / +」

中綴表示式轉字尾的規則:

1、從左至右遍歷中綴表示式,遇到數字就輸出,即成為字尾表示式的一部分;

2、如果是左括號,就壓入棧,如果是右括號,則棧中元素依次出棧,直到棧中左括號出棧。

3、如果是+、-運算子,若棧不為空,棧中元素依次出棧, 直到棧為空或遇到左括號,而後再將運算子壓入棧,

4、如果是*、/運算子,若棧不為空,且棧頂元素為*或/,則棧頂元素依次出棧,而後運算子入棧。

**如下:

public string infixtosuffix(string infixexpression) 

stack.push(c);

} else if (c == '*' || c == '/')

stack.push(c);

} else if (c == ')')

stack.pop();

} else if (c == '(') else if (c != ' ')

}while (!stack.isempty())

return suffixexpression;

}

字尾表示式運算規則:

從左至右遍歷表示式的每個數字和符號,遇到數字就進棧,遇到的是符號,將處於棧頂的兩個數字出棧,進行運算,運算結果進棧,一直到最終獲得結果。

// 字尾表示式計算

public void expressioncalculation(string suffixexpression) else

}system.out.println(numstack.peek());

}private double calculation(double num1, double num2, string operator)

return result;

}

四則運算表示式完整**:

private double calculation(double num1, double num2, string operator) 

return result;

}public double evaluateexpression(string expression)

else if (token.charat(0) == '+' || token.charat(0) == '-')

operatorstack.push(token.charat(0));

} else if (token.charat(0) == '*' || token.charat(0) == '/')

operatorstack.push(token.charat(0));

} else if (token.trim().charat(0) == '(') else if (token.trim().charat(0) == ')')

operatorstack.pop();

} else

}while(!operatorstack.isempty())

return operandstack.peek();

}

四則運算表示式求值(棧的應用)

1.前 中 字尾表示式的轉換 首先需要明白三者之間的轉換 自然表示式轉換為前 中 字尾表示式,其實是很簡單的。首先將自然表示式按照優先順序順序,構造出與表示式相對應的二叉樹,然後對二叉樹進行前 中 字尾遍歷,即得到前 中 字尾表示式。舉例說明將自然表示式轉換成二叉樹 a b c d 根據表示式的優先...

棧的應用 四則運算表示式求值

1 字尾表示法定義 所有的符號都是在要運算數字的後面出現。如 9 3 1 3 10 2的字尾表示法應該是9 3 1 3 10 2 2 字尾表示式計算結果 規則 從左到右遍歷表示式的每個數字和符號,遇到數字就進棧,遇到是符號,就將處於棧頂的兩個數字出棧,進行運算,運算結果進棧,一直到最終獲得結果。以9...

棧的應用 四則運算表示式求值

棧是計算機中非常基礎而又極其重要的一種資料結構,許多演算法的實現都離不開棧,它的特點是 先進後出 也可以說 後進先出 打乙個形象的比方 棧好比乙個彈夾,最先放入的子彈只能最後打出 而最後放入的子彈則最先打出。我們生活中接觸的表示式大部分都是中綴表示式,形如a b,這種表示式的特點是將運算子放在了運算...