利用棧和佇列進行表示式求值

2021-10-05 02:38:20 字數 3135 閱讀 9762

深入了解棧和佇列的特性,學會在實際問題下靈活運用它們。

表示式求值運算是實現程式語言的基本問題之一,也是棧應用的乙個典型例子。設計並演示用算符優先順序對算術表示式的求解過程。

1、演算法優先級別如下:

2、以字串行的形式從終端輸入語法正確、不含變數的算術表示式,利用給出的算符優先順序關係,實現對算術四則混合運算的求解過程。

pc微機

dos作業系統或 windows 作業系統

turbo c 程式整合環境或 visual c++ 程式整合環境

1、根據給出的算符優先順序,設定運算子棧和運算數棧;

2、在讀入表示式的同時,完成運算子和運算數的識別處理,並將運算數的字串行形式轉換成整數形式,並進行相應的運算;

3、除錯程式,檢查輸出結果;

4、實驗小結。

1.輸入資料:1+(20+4)/(4-1)

正確結果:9

2.輸入資料:2*9-6-(20+4)/(4-1)

正確結果:4

1、問題描述;

2、演算法的設計描述;

3、測試結果的分析與討論;

4、實現演算法的程式清單,應有足夠的注釋。

#include

using

namespace std;

#include

typedef

bool status;

constexpr

auto ok =1;

constexpr

auto error =0;

stack<

double

>operandsoriginal;

stack<

char

> operatororiginal;

stack<

double

>operands;

stack<

char

> operator;

void

calculation()

;char

number

(char a)

opead =

(opead +

int(a)-48

)*10;

}}status expression_input()

else

if(a ==

'+'|| a ==

'-'|| a ==

'*'|| a ==

'/'|| a ==

'('|| a ==

')')}}

void

reverse()

while

(!operatororiginal.

empty()

)}void

badditionandsubtraction

(char operator1)

//括號內加減法運算

void

bmultiplicationanddivision

(char operator1)

//括號內乘除法運算

void

additionandsubtraction

(char operator1)

//加減法

void

multiplicationanddivision

(char operator1)

//乘除法

void

bracketcirculation()

while

(!operatororiginal.

empty()

)badditionandsubtraction

(operator1);}

else

badditionandsubtraction

(operator1);}

else

if(operator1 ==

'*'|| operator1 ==

'/')

bmultiplicationanddivision

(operator1);}

tmp = operandsoriginal.

top();

operandsoriginal.

pop();

operands.

push

(tmp);}

//括號運算

void

calculation()

else

if(operator2 ==

'(')

else

if(operator2 ==

'+'|| operator2 ==

'-')

additionandsubtraction

(operator1);}

else

additionandsubtraction

(operator1);}

else

if(operator1 ==

'*'|| operator1 ==

'/')

multiplicationanddivision

(operator1);}

else

multiplicationanddivision

(operator1);}

else

if(operator1 ==

'(')

}//計算模組

利用堆疊進行表示式求值

基本策略 將中綴表示式轉換為字尾表示式,然後求值 中綴表示式轉換為字尾表示式的流程 從頭到尾讀取中綴表示式的每個物件,對不同的物件按不同的情況處理 1 運算數 直接輸出 2 左括號 壓入堆疊,入棧前左括號的優先順序最高,入棧之後其優先順序降到最低 3 右括號 將棧頂的運算子彈出並輸出,直到遇到左括號...

表示式求值 棧的利用

棧的功能 棧的順序儲存 include include define maxsize 100 typedef char elemtype typedef struct sqstack sqstack void init s sqstack s 檢測完畢 void out s sqstack s pr...

利用棧對表示式求值

輸入中綴表示式空格分隔 例如 2 3 展示如下 順序從右向左,無優先順序順序,圖中順序 4 5 20,20 4 24,結果為24 考慮優先順序的運算表示式求值 以上為不考慮優先順序的表示式求值方法,那麼接下來考慮優先順序時,將考慮 換成程式設計思路 執行表示式運算時,總是將結果壓入numstack棧...