


下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、5 將中綴表達式轉(zhuǎn)換為后綴表達式【問題描述】表達式轉(zhuǎn)換。輸入的中綴表達式為字符串,轉(zhuǎn)換得到的后綴表達式存入字符數(shù)組中并輸出。例如: a*(x+y)/(b-x) 轉(zhuǎn)換后得: a x y + * b x - /【數(shù)據(jù)結(jié)構(gòu)】l 定義一個暫時存放運算符的轉(zhuǎn)換工作棧opst。l 中綴表達式字符串char *infix;l 后綴表達式字符串char *postfix;【算法提示】轉(zhuǎn)換規(guī)則:把運算符移到它的兩個操作數(shù)后面,刪除掉所有的括號。從頭到尾掃描中綴表達式,對不同類型的字符按不同情況處理:l 數(shù)字或小數(shù)點,直接寫入字符串postfix,并在每個數(shù)值后面寫入一個空格;l 左括號,進棧,直到遇見相配的右括
2、號,才出棧;l 右括號,表明已掃描過括號內(nèi)的中綴表達式,把從棧頂直到對應(yīng)左括號之間的運算符依次退棧,并把結(jié)果推入棧內(nèi);l 對于運算符,分兩種情況處理:u 該運算符的優(yōu)先級大于棧頂符號的優(yōu)先級,則入棧;u 若該運算符的優(yōu)先級小于棧頂優(yōu)先級,則先彈出棧頂運算符、寫入postfix串;繼續(xù)將該運算符與棧頂運算符比較,直到能把它推入棧內(nèi)為止(即優(yōu)先級大于棧頂運算符)。說明:自行設(shè)計運算符優(yōu)先級的表示?!局饕a】3#include<iostream.h>#include<assert.h>#include<math.h>#include<string.h>
3、;const int stackIncreament=0;class opstpublic: opst(int sz=50) maxSize=sz; top=-1; elements=new charmaxSize; assert(elements!=NULL); opst()deleteelements; bool IsEmpty()return (top=-1)?true:false; bool IsFull()return (top=maxSize-1)?true:false; void Push( char &x); bool Pop(char &x); bool ge
4、tTop(char &x); int getSize()constreturn top+1; void MakeEmpty()top=-1; void input(); void Convert(); friend ostream& operator<<(ostream &os,opst &s);private: char *elements; int top; int maxSize; void overflowProcess();void opst:overflowProcess()/溢出處理 char *newArray=new charmax
5、Size+stackIncreament; for(int i=0;i<=top;i+) newArrayi=elementsi; maxSize=maxSize+stackIncreament; delete elements; elements=newArray;void opst:Push(char &x)if(IsFull()=true) overflowProcess();elements+top=x;bool opst:Pop( char &x) if(IsEmpty()=true) return false; x=elementstop-; return t
6、rue;bool opst:getTop(char &x) if(IsEmpty()=true)return false; x=elementstop; return true;ostream& operator<<(ostream &os,opst &s) os<<"top="<<s.top<<endl; for(int i=0;i<=s.top;i+) os<<s.elementsi; return os;void opst:input() char ch20; cout&
7、lt;<"請輸入中綴表達式(括號不能省略):"<<endl; cin.getline(ch,20); int i=0; while(chi!='0') this->Push(chi);i+; chi='#'bool isdigit(char &x) if(x>='a'&&x<='z')|(x>='A'&&x<='Z')|(x>='0'&&x<=
8、9;9') return true; else return false;int isp(char &x)/設(shè)置棧內(nèi)優(yōu)先級 switch(x) case '#': return 0;break; case '(': return 1;break; case '*': case '/': case '%': return 5;break; case '+': case '-': return 3;break; case ')': return 6;bre
9、ak; int icp(char &x)/設(shè)置棧外優(yōu)先級 switch(x) case '#': return 0;break; case '(': return 6;break; case '*': case '/': case '%': return 4;break; case '+': case '-': return 2;break; case ')': return 1;break; void opst:Convert() opst s; int i
10、=0; char ch='#',ch1,op; s.Push(ch); this->Push(ch); elementsi; while(this->IsEmpty()=false&&elementsi!='#') if(isdigit(elementsi) cout<<elementsi; i+; else s.getTop(ch1); if(isp(ch1)<icp(elementsi) s.Push(elementsi);i+; else if(isp(ch1)>icp(elementsi) s.Pop(op);cout<<op; else s.Pop(op); if(op='(') i+; void main() opst a; a.input(); cout<<"后綴表達式為:"<<endl; a.Convert(); cout<<endl;【實驗過程】請輸入中綴表達式(括號不能省略):(a+(b-c)/d)后綴表達式為:abc-d/+【實驗體會】怎么樣設(shè)置棧內(nèi)外的優(yōu)先級是解決這個
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 加油站服務(wù)合同范例
- 倉儲物流物料訂購合同范例
- 三棟鋪面出租合同范本
- 農(nóng)資商品購銷合同范本
- 環(huán)保沙發(fā)采購合同范本
- 合同范例范例租車
- 企業(yè)購買葡萄合同范本
- 口腔護士用工合同范例
- 卡制作合同范例
- 合同范本自助
- 【《海信電器企業(yè)作業(yè)成本法下的物流成本核算分析》8500字】
- 2024年南京旅游職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫匯編
- 馬克思主義基本原理概論400道(考點提分)
- 研究生調(diào)劑合同
- MSDS中文版(鋰電池電解液)
- 2024年湖南生物機電職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫及一套參考答案
- 2022年袋鼠數(shù)學(xué)競賽真題一二年級組含答案
- JJF 2104-2024 海水溶解氧測量儀校準規(guī)范
- 2024年中國煤科煤炭科學(xué)技術(shù)研究院有限公司招聘筆試參考題庫含答案解析
- 線切割操作規(guī)程培訓(xùn)
- 情緒管理團體輔導(dǎo)專項方案
評論
0/150
提交評論