




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、中綴表達(dá)式改后綴表達(dá)式一、需求分析1.本程序采用的是二叉樹后序遍歷來實(shí)現(xiàn)四則運(yùn)算的中綴表達(dá)式改為后綴表達(dá)式;2.需要用一個(gè)類來代表數(shù)據(jù)的結(jié)構(gòu);3. 輸入輸出格式:輸入:在字符界面上輸入一個(gè)中綴表達(dá)式,回車表示結(jié)束。輸出:如果該中綴表達(dá)式正確,那么在字符界面上輸出其后綴表達(dá)式,其中后綴表達(dá)式中兩相鄰操作數(shù)之間利用空格隔開;如果不正確,在字符界面上輸出表達(dá)式錯(cuò)誤提示。二、概要設(shè)計(jì)抽象數(shù)據(jù)類型用Node 類來定義一個(gè)結(jié)點(diǎn):class Nodepublic:char chmax; /每個(gè)結(jié)點(diǎn)的字符串Node* lChild; /左指針Node* rChild; /右指針Node();Node();算法
2、的基本思想輸入中綴表達(dá)式,用函數(shù)對(duì)字符串中的空格或者等號(hào)進(jìn)行處理,由于程序需要,會(huì)在輸入的字符串結(jié)尾加入=;用函數(shù)一次掃描每一個(gè)字符,有異常字符,報(bào)錯(cuò);沒有,則每次取出連續(xù)的數(shù)字字符或加減乘除的符號(hào),放入結(jié)點(diǎn),并按規(guī)則,將上一結(jié)點(diǎn)的左或右指針指向該結(jié)點(diǎn);退出將該樹用后序遍歷法,輸出每個(gè)結(jié)點(diǎn)的值;程序的流程輸入四則中綴表達(dá)式逐一掃描,判斷是否有錯(cuò)處理表達(dá)式逐一產(chǎn)生結(jié)點(diǎn),相關(guān)結(jié)點(diǎn)的左或右指針指向該結(jié)點(diǎn)輸出算法的具體步驟處理:將表達(dá)式中的空格和多余的等號(hào)刪掉,在表達(dá)式的最后加上等號(hào);掃描:掃描過程在樹的建立過程中;每次掃描,獲得數(shù)字字符作為一個(gè)結(jié)點(diǎn),并返回?cái)?shù)字字符后的算數(shù)運(yùn)算符或者括號(hào);根據(jù)返回的運(yùn)
3、算符或括號(hào),確定相應(yīng)的指針賦值或是新建結(jié)點(diǎn);(有錯(cuò)時(shí),會(huì)退出程序)后序遍歷法輸出獲得結(jié)果。算法的時(shí)空分析因?yàn)樵谔幚碜址畷r(shí),需要逐一掃描,也建立了新的字符數(shù)組,所以時(shí)間復(fù)雜度為(n);同樣,掃描的循環(huán),也與字符串的長(zhǎng)度有關(guān),時(shí)間復(fù)雜度也為(n)輸入和輸出的格式輸入:3.4+5*(2*(4+5)+7)輸出:3.4 5 2 4 5 + * 7 + * +五、測(cè)試結(jié)果六、實(shí)驗(yàn)總結(jié)這個(gè)程序好難,自己很難想到這方法。不過,沒想法時(shí),看不懂別人的程序時(shí),可以通過調(diào)試的方法,去獲取程序的主要思想,從而變?yōu)樽约旱南敕?,去?shí)現(xiàn)他。代碼嘛,主要是多寫,多仿,寫代碼的能力自然而然就提高了。七、附錄(可選)#incl
4、ude#includeusing namespace std;const int max=100;class Nodepublic:char chmax;Node* lChild;Node* rChild;Node();Node();Node:Node()strcpy(ch,);lChild=rChild=NULL;Node:Node()if(lChild!=NULL)delete lChild;if(rChild!=NULL)delete rChild;static int count=0;static char arraymax;/保存原始的中綴表達(dá)式static char str2*ma
5、x;/保存后序遍歷出來的字符串,為表達(dá)式求值提供方便static int k=0;void enter ();/輸入函數(shù)char getOp(Node *temp);/temp指針保存每個(gè)接點(diǎn)的,返回的是運(yùn)算符或者Node* crtTree(Node* root); /傳入根結(jié)點(diǎn)指針,返回根結(jié)點(diǎn)指針void output(Node *root);/獲得處理后的字符串 bool isError(char);/判斷字符是否有問題void deal(); /對(duì)字符數(shù)組進(jìn)行處理int main()Node* root=NULL;cin.getline(array,40);deal();root=crt
6、Tree(root);output(root);cout str;return 0;char getOp(Node *temp)/將數(shù)字字符存入一/個(gè)結(jié)點(diǎn),并返回?cái)?shù)字字符的后一個(gè)符號(hào)int i=0;if(isError(arraycount)exit(0);while(arraycount=0|arraycount=.)temp-chi=arraycount;i+;count+;temp-chi=0;count+;return arraycount-1;Node* crtTree(Node* root)Node *p,*q;char op;if(root=NULL)root=new Node;
7、p=new Node;op=getOp(root);while(op!=)q=new Node;q-ch0=op;q-ch1=0;switch(op)case +:case -: q-lChild=root;root=q;p=new Node;op=getOp(p);root-rChild=p;break;case *:case /:if(root-ch0=+|root-ch0=-) p=new Node; strcpy(p-ch,root-ch); p-lChild=root; p-rChild=q; op=getOp(root); root=p; elseq-lChild=root;roo
8、t=q;p=new Node;op=getOp(p);root-rChild=p;break;case (:p=root;while(p-rChild)p=p-rChild;if(p-lChild=NULL)p-lChild=crtTree(p-lChild);/遞歸創(chuàng)建/括號(hào)里的指針op=arraycount;count+;break;elsep-rChild=crtTree(p-rChild);/遞歸創(chuàng) /建括號(hào)里的指針op=arraycount;count+;break;case ): return root;return root;void output(Node *root) /傳入根結(jié)點(diǎn),后/序遍歷歷賦值給另一個(gè)字符數(shù)組(主要是/為了給后序的計(jì)算表達(dá)式值提供方便)int n;if(root)output(root-lChild);output(root-rChild);n=0;while(root-chn!=0)strk+=root-chn+;strk+= ;bool isError(char ch) /判斷每個(gè)字符/是否有錯(cuò)if(ch!=+&ch!=-&ch!=*&ch!=/&!(ch=0)&ch!=.&ch!=(&ch!=)co
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 前臺(tái)工作的職業(yè)發(fā)展路徑計(jì)劃
- 財(cái)務(wù)資金分配計(jì)劃
- 通信行業(yè)月度個(gè)人工作計(jì)劃
- 《六盤水市東風(fēng)煤業(yè)有限公司水城區(qū)東風(fēng)煤礦(優(yōu)化重組)礦產(chǎn)資源綠色開發(fā)利用方案(三合一)》評(píng)審意見
- 攀枝花駿恒礦業(yè)有限責(zé)任公司爐房箐鐵礦礦山地質(zhì)環(huán)境保護(hù)與土地復(fù)墾方案情況
- 保健植物知識(shí)培訓(xùn)課件
- 蛋白還原酸護(hù)理教程
- 小學(xué)信息技術(shù)四年級(jí)上冊(cè)第5課《 精彩游戲-軟件的下載》教學(xué)設(shè)計(jì)001
- 2025年銅川貨運(yùn)從業(yè)資格證考試模擬考試題庫(kù)下載
- 2025年新鄉(xiāng)貨運(yùn)從業(yè)資格證怎么考試
- RRU設(shè)計(jì)原理與實(shí)現(xiàn)
- 工程質(zhì)量責(zé)任制和考核辦法
- 《室內(nèi)展示設(shè)計(jì)》課件
- 中級(jí)消防設(shè)施操作員考試題庫(kù)
- 服裝店售后培訓(xùn)課件
- 新舊系統(tǒng)數(shù)據(jù)遷移方案
- 3D打印與傳統(tǒng)工藝美術(shù)的融合創(chuàng)新
- 運(yùn)動(dòng)損傷預(yù)防與處理的案例分析
- 第四次工業(yè)革命課件
- nfc果汁加工工藝
- 《中國(guó)十大元帥》課件
評(píng)論
0/150
提交評(píng)論