演算法學習 算術表示式

2021-07-27 23:40:06 字數 1081 閱讀 2417

題目描述:

implement a basic calculator to evaluate a ****** expression string.

the expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non-negative integers and empty spaces .

you may assume that the given expression is always valid.

some examples:

"1 + 1" = 2

" 2-1 + 2 " = 3

"(1+(4+5+2)-3)+(6+8)" = 23

題目分析:

這道題是標準算數表示式的乙個變式,區別在於題目之中的有括號有省略的情況。所以整體思路為:雙棧,乙個棧stack放運算元,乙個棧opr放操作符。

思路:遇到+ 、-、(的時候,操作符壓棧opr

遇到)的時候,從stack 和opr中彈出計算需要的運算元個數,同時把結果壓棧stack,直到遇到(為止

在計算完這一組括號了之後,持續計算,到上乙個(為止,這是處理()中的數作為乙個運算元的情況

遇到數字的情況,壓棧,同時計算到(為止,這是保證從左到右的運算資料

注: 也可以以後綴表達的角度來理解這道題。

/**

* @param s

* @return

*/var calculate = function(s)

if(str.length > 0) string.push(str);

s[i] && string.push(s[i]);

}var stack = ,opr = ,i=0,len=string.length;

while(i0 && opr[opr.length-1]!== '(')

i++;

}else

i++;}}

return stack.pop();

};

算術表示式

引用標頭檔案 include include include using namespace std typedef int elemtype const int stack init size 100 儲存空間的初始化分配量 const int stackincrement 10 儲存空間分配增量...

算術表示式

include include include include define maxzhansize 30 char stack maxzhansize char deleted int top void add int top,char item 逆波蘭數計算 define element int...

演算法中的算術表示式

1 2 3 4 5 我們如何通過演算法來計算上面的表示式呢?方法 用2個棧 乙個用於儲存運算子,乙個用於儲存運算元 其中的運算子包括 表示式有括號 運算子 和運算元 數字 組成。我們根據以下4種情況從左到右逐個將這些實體送入棧處理 將運算元壓入運算元棧 將運算子壓入運算子棧 忽略左括號 在遇到右括號...