下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、數(shù)據(jù)結(jié)構(gòu)課程實驗指導書逆波蘭表達式求值一、需求分析1、從鍵盤中輸入一個后綴表達式,該表示包括加減乘除等操作符,以及正整數(shù)作為操 作數(shù)等。2、用堆棧來實現(xiàn)3、測試數(shù)據(jù)輸入:2 3 * 1 -#輸出:2 3 * 1 - =5二、概要設(shè)計抽象數(shù)據(jù)類型需要一個浮點數(shù)棧來存儲還沒有計算的浮點數(shù)或者運算的結(jié)果。ADT Stack數(shù)據(jù)成員:int size; int top; II分別用于存儲棧大小、棧頂位置float *listArray;存儲浮點型數(shù)字的數(shù)組成員函數(shù):bool push(float it);bool pop(float& it);bool isEmpty(); II 判斷棧為空bool
2、isOne();判斷棧是否只有一個元素算法的基本思想1. 逐一掃描字符串,用ascii碼進行判斷,如果該字符是數(shù)字,則利用x=x*10+stri-48 將數(shù)據(jù)由字符類型轉(zhuǎn)換為浮點型數(shù)據(jù);2. 如果字符是.則將.轉(zhuǎn)化為小數(shù)點,并將后的數(shù)據(jù)轉(zhuǎn)化為小數(shù)部分;3. 遇到空格前是數(shù)據(jù)的,將x押入棧;4. 如果該字符是或,判斷棧里的元素是否少于兩個個,如果少于兩個, 報錯;如果大于等于兩個,就彈出兩個數(shù)據(jù),并進行相應(yīng)的計算;程序的流程輸入字符串,程序?qū)ψ址来螔呙?。掃描一位,處理一位。掃描完成后,判斷棧里是不是只有一個數(shù)據(jù),若是,得到正確結(jié)果;若不是,則表達式出錯。三、詳細設(shè)計物理數(shù)據(jù)類型用浮點數(shù)類型的
3、棧存儲運算中要用的數(shù)據(jù),需要入棧、出棧,故設(shè)計如下的浮點類型的棧:class Stackprivate:int size;int top;float *listArray;public:Stack(i nt sz=20);Stack();bool push(float it);/ 入棧bool pop(float& it);/ 出棧bool isEmpty();判斷棧是否為空bool isOn e(); /判斷棧里是否只有且僅有一個元素;6成員函數(shù)的函數(shù)體Stack:Stack(i nt sz)棧構(gòu)造函數(shù)size=sz;top=0;listArray=new floatsize;bool St
4、ack: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:isO ne()if(top=1)return true;return false;Stack:Stack()delete listArray;算法的
5、具體步驟用switch語句實現(xiàn)1. 逐一掃描字符串,用ascii碼進行判斷,如果該字符是數(shù)字,則利用x=x*10+stri-48 將數(shù)據(jù)由字符類型轉(zhuǎn)換為浮點型數(shù)據(jù);2. 如果字符是.則將.轉(zhuǎn)化為小數(shù)點,并將 后的數(shù)據(jù)轉(zhuǎn)化為小數(shù)部分;3. 遇到空格前是數(shù)據(jù)的,將x押入棧;4. 如果該字符是或,判斷棧里的元素是否少于兩個個,如果少于兩個, 報錯;如果大于等于兩個,就彈出兩個數(shù)據(jù),并進行相應(yīng)的計算;算法的時空分析因為入棧、出棧的時間復雜度均為(1),所以時間的復雜度主要取決于字符串的長度,空間也同樣取決于字符串長度。時間復雜度為(n)。輸入和輸出的格式輸入:2 3 * 1 -#輸出:2 3 * 1
6、- =5五、測試結(jié)果- E : Conr se逆海蘭 hli&bugA逆液 二.exe3 * 4 - E * 4 - -2fkunn any hcjy to cont xhag六、用戶使用說明(可選)1. 運行程序后,直接輸入后綴表達式;2. 用戶輸入的表達式必須符合后綴表達式的要求,并以#號結(jié)束。七、附錄(可選)#in elude #in elude using n amespaee std; class Stackprivate:int size;int top;float *listArray;public:Stack(i nt sz=20);Stack();bool push(floa
7、t it);/ 入棧bool pop(float& it);/ 出棧bool isEmpty();判斷棧是否為空bool isO ne();判斷棧里是否一個元素 ;Stack:Stack(i nt sz)/ 棧構(gòu)造函數(shù)size=sz;top=0;listArra y=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 tr
8、ue;bool Stack:isEmpty() / 判斷站是否為空if(top=0)return true;return false;bool Stack:isO ne()if(top=1)return true;return false;Stack:Stack()delete listArray;/此函數(shù)傳進輸入的字符串,并對字符串進/行掃描并進行相應(yīng)處理,得到結(jié)果(函數(shù)聲/明)void compute(char* str);int mai n()char str20;cin. getli ne(str,20,#); compute(str);return 0;/此函數(shù)傳進輸入的字符串,并對
9、字符串進/行掃描并進行相應(yīng)處理,得到結(jié)果(函數(shù)體)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.isO ne()|aStack.isEmpty() cout 表達式不符合要求; return; aStack.pop(s1); aStack.pop(s2);x=s2+s1;aStack.push(x); x=0;i+;break;case -: 減法運算if(aStack.isO ne()|aStack.isEm
10、pty() cout 表達式不符合要求; return;aStack.pop(s1); aStack.pop(s2); x=s2-s1;aStack.push(x);x=0;i+;break;case *: /乘法運算if(aStack.isO ne()|aStack.isEmpty() cout 表達式不符合要求; return;aStack.pop(s1); aStack.pop(s2); x=s2*s1;aStack.push(x);x=0;i+;break;case /: /除法運算if(aStack.isO ne()|aStack.isEmpty()cout 表達式不符合要求;return;aStack.pop(sl);a
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中外合資企業(yè)合同書模板2024年
- 商標轉(zhuǎn)讓協(xié)議
- 房屋租賃合同補充協(xié)議案例
- 司機的勞動合同協(xié)議范本2024年
- 二手車轉(zhuǎn)讓協(xié)議書的范本
- 電子商務(wù)加盟合同范本2024年
- 6.20條例條令學習
- 2024年學校物品采購合同
- 2024年美容院用工合同
- 專業(yè)勞動合同模板
- GB 21258-2024燃煤發(fā)電機組單位產(chǎn)品能源消耗限額
- 手術(shù)室急危重患者的搶救與配合
- 1.1公有制為主體多種所有制經(jīng)濟共同發(fā)展課件-高中政治統(tǒng)編版必修二經(jīng)濟與社會
- 研發(fā)投入核算管理制度
- 新疆哈密地區(qū)(2024年-2025年小學四年級語文)人教版期中考試(上學期)試卷及答案
- 2024-2030年中國SUV行業(yè)市場深度調(diào)研及發(fā)展前景與投資前景研究報告
- DB34∕T 4010-2021 水利工程外觀質(zhì)量評定規(guī)程
- 2023年廣州市教育系統(tǒng)招聘優(yōu)才計劃筆試真題
- 24.1.2 垂直于弦的直徑(1) 人教版數(shù)學九年級上冊課件
- 新教材適用高中物理第一章動量守恒定律測評新人教版選擇性必修第一冊
- 中國銀行河北省分行2022年度高端客戶活動方案
評論
0/150
提交評論