山東大學《資料結構》實驗四 堆疊的應用

2021-10-02 04:31:48 字數 1432 閱讀 2667

掌握堆疊的使用。

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。選用適當方案,設計出實驗線路圖。設計試驗步驟。利用指示燈...