




全文預覽已結束
下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
數據結構課程實驗指導書逆波蘭表達式求值一、需求分析1、從鍵盤中輸入一個后綴表達式,該表示包括加減乘除等操作符,以及正整數作為操作數等。2、用堆棧來實現3、測試數據輸入:2 3 * 1 #輸出:2 3 * 1 - =5二、概要設計抽象數據類型需要一個浮點數棧來存儲還沒有計算的浮點數或者運算的結果。ADT Stack數據成員:int size; int top; /分別用于存儲棧大小、棧頂位置float *listArray;/存儲浮點型數字的數組成員函數:bool push(float it);bool pop(float& it);bool isEmpty(); /判斷棧為空bool isOne();/判斷棧是否只有一個元素算法的基本思想1. 逐一掃描字符串,用ascii碼進行判斷,如果該字符是數字,則利用x=x*10+stri-48將數據由字符類型轉換為浮點型數據;2. 如果字符是.,則將.轉化為小數點,并將.后的數據轉化為小數部分;3. 遇到空格前是數據的,將x押入棧;4. 如果該字符是+,-,*或/,判斷棧里的元素是否少于兩個個,如果少于兩個,報錯;如果大于等于兩個,就彈出兩個數據,并進行相應的計算;程序的流程輸入字符串,程序對字符串依次掃描。掃描一位,處理一位。掃描完成后,判斷棧里是不是只有一個數據,若是,得到正確結果;若不是,則表達式出錯。三、詳細設計物理數據類型用浮點數類型的棧存儲運算中要用的數據,需要入棧、出棧,故設計如下的浮點類型的棧:class Stackprivate:int size;int top;float *listArray;public:Stack(int sz=20);Stack();bool push(float it);/入棧bool pop(float& it);/出棧bool isEmpty();/判斷棧是否為空bool isOne(); /判斷棧里是否只有且僅有一個元素;成員函數的函數體 5 Stack:Stack(int sz) /棧構造函數size=sz;top=0;listArray=new floatsize;bool Stack:push(float it)if(top=size)return false;listArraytop+=it;return true;bool Stack:pop(float& it)if(top=0)return false;it=listArray-top;return true;bool Stack:isEmpty() /判斷站是否為空if(top=0)return true;return false;bool Stack:isOne()if(top=1)return true;return false;Stack:Stack()delete listArray;算法的具體步驟用switch語句實現1. 逐一掃描字符串,用ascii碼進行判斷,如果該字符是數字,則利用x=x*10+stri-48將數據由字符類型轉換為浮點型數據;2. 如果字符是.,則將.轉化為小數點,并將.后的數據轉化為小數部分;3. 遇到空格前是數據的,將x押入棧;4. 如果該字符是+,-,*或/,判斷棧里的元素是否少于兩個個,如果少于兩個,報錯;如果大于等于兩個,就彈出兩個數據,并進行相應的計算;算法的時空分析因為入棧、出棧的時間復雜度均為(1),所以時間的復雜度主要取決于字符串的長度,空間也同樣取決于字符串長度。時間復雜度為(n)。輸入和輸出的格式輸入:2 3 * 1 #輸出:2 3 * 1 - =5五、測試結果六、用戶使用說明(可選)1. 運行程序后,直接輸入后綴表達式;2. 用戶輸入的表達式必須符合后綴表達式的要求,并以#號結束。七、附錄(可選)#include #include using namespace std;class Stackprivate:int size;int top;float *listArray;public:Stack(int sz=20);Stack();bool push(float it);/入棧bool pop(float& it);/出棧bool isEmpty();/判斷棧是否為空bool isOne();/判斷棧里是否一個元素;Stack:Stack(int sz) /棧構造函數size=sz;top=0;listArray=new floatsize;bool Stack:push(float it)if(top=size)return false;listArraytop+=it;return true;bool Stack:pop(float& it)if(top=0)return false;it=listArray-top;return true;bool Stack:isEmpty() /判斷站是否為空if(top=0)return true;return false;bool Stack:isOne()if(top=1)return true;return false;Stack:Stack()delete listArray;/此函數傳進輸入的字符串,并對字符串進/行掃描并進行相應處理,得到結果(函數聲/明)void compute(char* str); int main()char str20;cin.getline(str,20,#);compute(str);return 0;/此函數傳進輸入的字符串,并對字符串進/行掃描并進行相應處理,得到結果(函數體)void compute(char* str)Stack aStack;float x=0,y=0,s1,s2,temp;int i;i=0;while(stri)switch(stri)case +: /加法運算if(aStack.isOne()|aStack.isEmpty() cout 表達式不符合要求;return;aStack.pop(s1);aStack.pop(s2);x=s2+s1;aStack.push(x);x=0;i+;break;case -: /減法運算if(aStack.isOne()|aStack.isEmpty()cout 表達式不符合要求;return;aStack.pop(s1); aStack.pop(s2);x=s2-s1; aStack.push(x);x=0; i+;break;case *: /乘法運算if(aStack.isOne()|aStack.isEmpty()cout 表達式不符合要求;return;aStack.pop(s1); aStack.pop(s2);x=s2*s1;aStack.push(x);x=0;i+;break;case /: /除法運算if(aStack.isOne()|aStack.isEmpty()cout 表達式不符合要求;return;aStack.pop(s1);a
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 青春與夢想講話稿集錦15篇
- 防溺水安全教育活動總結集合15篇
- 出差出行規劃方案(3篇)
- 電子坡道檢修方案(3篇)
- 標識標牌投標方案(3篇)
- 護理職業素養課件教學
- 西南石油大學《精神藥理學》2023-2024學年第二學期期末試卷
- 海南大學《高等數理統計》2023-2024學年第二學期期末試卷
- 淮北師范大學《曲式與作品分析基礎》2023-2024學年第二學期期末試卷
- 德宏師范高等專科學校《中醫護理適宜技術》2023-2024學年第二學期期末試卷
- JJF 1078-2002光學測角比較儀校準規范
- GB/T 22843-2009枕、墊類產品
- 如何進行生產線編成
- GB 1903.21-2016食品安全國家標準食品營養強化劑富硒酵母
- 腦卒中篩查與干預流程
- 藝術碩士論證報告
- 帕金森病患者的睡眠障礙課件
- 公司質量目標過程績效評價表
- 埋針治療評分標準
- 2022 年湖南省長沙市雨花區金海中學小升初數學試卷
- 行業標準:GB∕T 9254.2-2021 信息技術設備、多媒體設備和接收機 電磁兼容 第2部分:抗擾度要求
評論
0/150
提交評論