實驗題目:棧的應用-算術表示式求值
實驗環境: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 ...