C++栈实现将中缀表达式转换为后缀表达式.doc

C++栈实现将中缀表达式转换为后缀表达式.doc

ID:55089231

大小:108.00 KB

页数:3页

时间:2020-04-27

C++栈实现将中缀表达式转换为后缀表达式.doc_第1页
C++栈实现将中缀表达式转换为后缀表达式.doc_第2页
C++栈实现将中缀表达式转换为后缀表达式.doc_第3页
资源描述:

《C++栈实现将中缀表达式转换为后缀表达式.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、5将中缀表达式转换为后缀表达式【问题描述】表达式转换。输入的中缀表达式为字符串,转换得到的后缀表达式存入字符数组中并输出。例如:a*(x+y)/(b-x)转换后得:axy+*bx-/【数据结构】l定义一个暂时存放运算符的转换工作栈opst。l中缀表达式字符串char*infix;l后缀表达式字符串char*postfix;【算法提示】转换规则:把运算符移到它的两个操作数后面,删除掉所有的括号。从头到尾扫描中缀表达式,对不同类型的字符按不同情况处理:l数字或小数点,直接写入字符串postfix,并在每

2、个数值后面写入一个空格;l左括号,进栈,直到遇见相配的右括号,才出栈;l右括号,表明已扫描过括号内的中缀表达式,把从栈顶直到对应左括号之间的运算符依次退栈,并把结果推入栈内;l对于运算符,分两种情况处理:u该运算符的优先级大于栈顶符号的优先级,则入栈;u若该运算符的优先级小于栈顶优先级,则先弹出栈顶运算符、写入postfix串;继续将该运算符与栈顶运算符比较,直到能把它推入栈内为止(即优先级大于栈顶运算符)。说明:自行设计运算符优先级的表示。【主要代码】#include#incl

3、ude//#includeconstintstackIncreament=20;classSeqStack{private:char*elements;inttop;intmaxSize;voidoverflowProcess();public:SeqStack(intsz=50);~SeqStack(){delete[]elements;}voidPush(constchar&x);boolPop(char&x);boolgetTop(char&x);i

4、ntisdigit(charch);intisp(charch1);inticp(charch2);boolIsEmpty()const{return(top==-1)?true:false;}boolIsFull()const{return(top==maxSize-1)?true:false;}intgetSize()const{returntop+1;}voidMakeEmpty(){top=-1;}};SeqStack::SeqStack(intsz){top=-1;maxSize=sz;e

5、lements=newchar[maxSize];3assert(elements!=NULL);}voidSeqStack::overflowProcess(){char*newArray=newchar[maxSize+stackIncreament];/*if(newArray==NULL){cerr<<"存储分配失败!"<

6、creament;delete[]elements;elements=newArray;}voidSeqStack::Push(constchar&x){if(IsFull()==true)overflowProcess();elements[++top]=x;}boolSeqStack::Pop(char&x){if(IsEmpty()==true)returnfalse;x=elements[top--];returntrue;}boolSeqStack::getTop(char&x){if(I

7、sEmpty()==true)returnfalse;x=elements[top];returntrue;}intSeqStack::isdigit(charch){if(ch>='0'&&ch<='9'

8、

9、ch=='.'

10、

11、ch>='a'&&ch<='z'

12、

13、ch>='A'&&ch<='Z')return1;elsereturn0;}intSeqStack::isp(charch1){intval;switch(ch1){case'#':val=0;break;case'(':val=1;bre

14、ak;case'*':case'/':case'%':val=5;break;case'+':case'-':val=3;break;case')':val=6;break;}returnval;}intSeqStack::icp(charch2){intval;switch(ch2){case'#':val=0;break;case'(':val=6;break;case'*':case'/':case'%':val=4;break;case'+':case'-':

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。