掌握堆疊的使用。
1、輸入乙個數學表示式(假定表示式輸入格式合法),計算表示式結果 並輸出。
2、數學表示式由單個數字和運算子「+」、「-」、「*」、「/」、「(、) 」構成, 例如 2 + 3 * ( 4 + 5 ) - 6 / 4。
3、變數、輸出採用整數,只舍不入。
本題測試一定要多找幾個測試用例,特別是複雜用例、邊界用例。否 則,很容易造成宕機或者沒有返回結果。
假設輸入的表示式正確,即每個左括號都對應乙個右括號;
假設不存在括號巢狀的情況;
用棧lifo的思想,借助陣列完成中綴表示式的直接計算。
**如下:
#include
#include
#include
#include
using
namespace std;
string expression;
int num[25]
,temp[10]
,i,t;
bool flag=
true
;//true時對num陣列操作,false時對temp陣列操作(對括號內進行運算)
int numi=-1
,tempi=-1
;void
calculate
(const
char exp,
int next)
else
if(exp==
'-')
else
if(exp==
'*')
else
}else
if(exp==
'/')
else
}return;}
intmain()
else
else
if(expression[i]
==')'
) flag=
true;if
(pair!=0)
else num[
++numi]
=t; tempi=-1
;}else
else}}
}int ans=0;
//最終將num陣列中所有的值加起來得到表示式的結果
for(
int j=numi;j>=
0;j--
) cout
"end"
}
老師在課上講了字尾表示式的過程。直接用中綴表示式需要兩個棧來實現不帶括號巢狀的表示式計算,括號巢狀的可以用三個棧去實現。
以上**是提交平台的**,其實可以對運算部分(加減乘除)的方法進行優化,在主函式裡判斷flag後將陣列作為引數傳入。
山東大學 資料結構 實驗3 線性表操作
一 要求完成時間 實驗開始後的第四周之前完成 二 實驗目的 掌握線性表的基本操作 插入 刪除 查詢。掌握鍊錶遍歷器的使用方法。三 實驗內容 1 輸入n個不為零的整數作為節點元素值,遇到0代表輸入結束 不建立元素值為0的節點 建立有序鍊錶。輸出整個鍊錶。2 輸入乙個整數,將該數插入到有序表相應位置。輸...
山東大學《資料結構》實驗二 排序演算法
掌握各種排序方法的實現思想。1 輸入 2 20 個不為零的正整數,遇到 0 代表輸入結束,0 不參與排序。2 數字選擇排序方法,1 氣泡排序,2 插入排序,3 基數排序 3 基數排序能夠僅僅實現小於 10 的正整數的排序。有大於 9 的輸入時,直接輸出 0。4 使用所選排序方法的排序,結果輸出所用方...
山東大學軟體學院計算機組織與結構實驗四
有積分的可以支援一下 卑微 一 實驗目的 掌握計算機實驗中時序系統的設計方法。設計乙個基本時序系統,該系統具有4個節拍電平及四相工作脈衝,其時序關係參閱下圖中的m0 m3,t0 t3。二 實驗結構圖 三 實驗要求 開關資料為移位器預置0001。選用適當方案,設計出實驗線路圖。設計試驗步驟。利用指示燈...