計算表示式的值 順序棧(資料結構第二次實驗)

2022-06-13 03:03:09 字數 2258 閱讀 1980

實驗題目:棧的應用-算術表示式求值

實驗環境:visual c++ 6.0                    

實驗目的 :

1 .掌握棧的定義及實現;

2 .掌握利用棧求解算術表示式的方法。

實驗內容:

通過修改完善教材中的演算法3.4,利用棧來實現算術表示式求值的演算法。對演算法3.4中呼叫的幾個函式要給出其實現過程:

(1) 函式in(c):判斷c是否為運算子;

(2) 函式precede(t1,t2):判斷運算子t1和t2的優先順序;

(3) 函式operate(a,theta,b):對a和b進行二元運算theta。

程式執行時,輸入合法的算術表示式(中間值及最終結果要在0~9之間,可以包括加減乘除和括號),便可輸出相應的計算結果。如下圖:

1. 將棧的定義和實現單獨儲存在標頭檔案「stack.h」中,然後在表示式求值的源程式中包含此標頭檔案(即#include「stack.h」)。

2. 表示式求值源程式的具體實現

(1) 主函式如下:

void main()

(2) 函式evaluateexpression的實現見演算法3.22

(3) 函式in(c)的實現可以採用以下方式:

status in(selemtype c)// 應在前面有定義typedef char selemtype;

}(4) 函式precede(t1,t2)的實現可以採用以下形式:

selemtype precede(selemtype t1,selemtype t2)

return f;

}(5) 函式operate(a,theta,b)的實現可以採用以下方式:

selemtype operate(selemtype a,selemtype theta,selemtype b)

return c;

}選做內容:進一步改進,使表示式的中間值及最終結果不侷限於0~9之間的個位數。(如果完成要在實驗報告中註明),如下圖:

實驗要求 :

(1) 程式要新增適當的注釋,程式的書寫要採用 縮排格式 。

(2) 程式要具在一定的 健壯性,即當輸入資料非法時, 程式也能適當地做出反應。

(3) 程式要做到 介面友好,在程式執行時使用者可以根據相應的提示資訊進行操作。

(4) 根據實驗報告模板詳細書寫實驗報告,在實驗報告中給出 表示式求值演算法的流程圖 。

(5) 上傳源程式到sakai網路教學平台。順序表的源程式儲存為 calculator.cpp。

#include#include

#include

#include

#define overflow -2

#define maxsize 100

#define ok 1

#define error 0

#define true 1

#define false 0#include

using

namespace

std;

typedef

intstatus;

typedef

char

selemtype;

//--------順序棧的儲存結構------

typedef struct

sqstack;

status initstack (sqstack &s)

status push(sqstack &s,selemtype e)

status pop(sqstack &s,selemtype &e)

selemtype gettop(sqstack s)

status in(selemtype c)

}selemtype precede(selemtype t1,selemtype t2)

returnf;}

selemtype operate(selemtype a,selemtype theta,selemtype b)

return c; //

返回計算結果

}char

evaluateexpression()

else

switch(precede(gettop(optr),ch)) //

比較optr的棧頂元素和ch的優先順序

}return gettop(opnd); //

opnd棧頂元素即為表示式求值結果

}int

main()

資料結構棧之計算字尾表示式

對於乙個給定的字尾表示式,如果它是合法的 注意 次演算法是基於基本操作符是2元操作符且運算元為一位正整數!其求值的基本思想是 對於給定的表示式進行遍歷,假設遇到的是運算元就將其壓入棧 假設遇到的是操作符,將棧頂的兩個元素彈出,假設棧頂兩個元素依次為a,b a在上b在下 將次操作符應用於這兩個棧頂元素...

棧實現表示式計算 資料結構

思路 所包含的運算子有 1 建立兩個棧,乙個用來儲存運算元,另乙個用來儲存運算子,開始時在運算子棧中先壓入 0 乙個表示式的結束符。2 然後從左至右依次讀取表示式中的各個符號 運算元或者運算子 3 如果讀到的是運算元直接存入運算元棧 4 如果讀到的是運算子,則作進一步判斷 若讀到的是 0 結束符,而...

資料結構 表示式計算

表示式求值時資料結構的基礎演算法之一,其主要思想就是堆疊的使用。下面將詳細的介紹演算法的各個部分 表示式求值演算法主要流程如下 首先要說明的是字尾表示式,字尾表示式即 不包含括號,運算子放在兩個運算物件的後面,所有的計算按運算子出現的順序,嚴格從左向右進行 不再考慮運算子的優先規則,如 2 1 3 ...