欢迎来到天天文库
浏览记录
ID:55089231
大小:108.00 KB
页数:3页
时间:2020-04-27
《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(I7、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;bre14、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'-':
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'-':
此文档下载收益归作者所有