資料結構 第2周 棧與佇列 4 中綴表示式的值

2021-06-19 01:10:06 字數 1455 閱讀 5832

總時間限制: 

200ms 

記憶體限制: 

1024kb

描述

人們熟悉的四則運算表示式稱為中綴表示式,例如(23+34*45/(5+6+7))。在程式語言中,可以利用堆疊的方法把中綴表示式轉換成保值的字尾表示式(又稱逆波蘭表示法),並最終變為計算機可以直接執行的指令,得到表示式的值。

給定乙個中綴表示式,編寫程式,利用堆疊的方法,計算表示式的值。

輸入第一行為測試資料的組數n

接下來的n行,每行是乙個中綴表示式。表示式中只含數字、四則運算符和圓括號,運算元都是正整數,數和運算子、括號之間沒有空格。中綴表示式的字串長度不超過600。

輸出對每一組測試資料輸出一行,為表示式的值

樣例輸入

3

3+5*8

(3+5)*8

(23+34*45/(5+6+7))

樣例輸出

43

64108

提示注意:運算過程均為整數運算(除法運算'/'即按照c++定義的int除以int的結果,測試資料不會出現除數為0的情況),輸出結果也為整數(可能為負)。

中間計算結果可能為負。

# include# include# include# include# includeusing namespace std;

stackq;

stackw;

bool precede(char a, char b)//比較操作符優先順序

switch(b)

if(na>=nb)

return true;

else

return false;

}bool opmember(char ch)//判斷是否是操作符

void transform(char suffix, char exp)//中綴式exp轉字尾式suffix

q.push('#');

char *p=exp;

char ch=*p, c;

int k=0;

while(!q.empty())

break;

}default:

else

}if(ch!='#') q.push(ch);

break;}}

}if(ch!='#')ch=*++p;

}suffix[k]='\0';

}int operate(int a, char ch, int b)//一次計算

int evaluation(char suffix)//計算字尾式

while(ch!='#')

}else

}ch=*p++;

}result =w.top();

return result;

}int main(void)

return 0;

}

資料結構4 棧與佇列

始終記住棧的特點 後進先出 佇列 先進先出 寫乙個棧的例子 1 8進製轉換 2 include3 include4 using namespace std 5void conversion intn 6 13while result.empty 1418 19 intmain 20 寫了乙個括號匹配...

《大話資料結構》第4章 棧與佇列

棧與佇列 棧 佇列都是特殊的線性表 受限表 只不過對插入和刪除操作做了限制 沒有修改操作 這些操作只能限制在表的一端 what棧 棧是限定僅在表尾 這裡的表尾是指棧頂,而不是棧底 進行插入和刪除操作的線性表 what佇列 佇列是只允許在表的一端進行插入操作,而在表的另一端進行刪除操作的線性表 棧 佇...

《大話資料結構》第4章 棧與佇列

我們把乙個直接呼叫自己或通過一系列的呼叫語句間接地呼叫自己的函式,稱做遞迴函式 版本1 迭代版本 func fbi1 i int int return arr i 版本2 遞迴版本 func fbi2 i int int 迭代使用的是迴圈結構,遞迴使用的是選擇結構遞迴使程式的結構更清晰 更簡潔 更容...