2020-10-20

it2023-07-20  67

const int StackSize=10; //根据实际问题具体定义 template //定义模板类SeqStack class SeqStack { public: SeqStack(); //构造函数,初始化一个空栈 ~SeqStack(); //析构函数 void Push(DataType x); //入栈操作,将元素x入栈 DataType Pop(); //出栈操作,将栈顶元素弹出 DataType GetTop(); //取栈顶元素(并不删除) void Change(); //中缀表达式转后缀 private: DataType data[StackSize]; //存放栈元素的数组 int top; //栈顶元素在数组中的下标 }; template void SeqStack::Change(){ SeqStack C; char ch; char outch; cout<<“请输入中缀表达式,并以#结尾”<<endl; cin>>ch; while(ch!=’#’){ while(ch>=‘0’&&ch<=‘9’||ch>=‘a’&&ch<=‘z’||ch>=‘A’&&ch<=‘Z’) //遇到数字和字符直接输出 { cout<<ch; cin>>ch; }//遇到字符+ - if(ch==’+’||ch==’-’) //优先级最低的+、- { if(top=-1){ C.Push(ch); //栈空时直接入栈 } else{//栈非空 do{ outch=C.Pop(); if(outch=’(’) {C.Push(outch);} else{cout<<outch;} //否则直接输出栈顶元素,因为+、-优先级最低 }while(top!=-1&&outch!=’(’); C.Push(ch); //将+、-入栈 } }//遇到) else if(ch==’)’){ //遇到),依次输出栈中元素直到遇到(,并且把(元素删除 outch=C.Pop(); while(outch!=’(’){ cout<<outch; outch=C.Pop(); } } //遇到*、/、( else if(ch==’*’||ch==’/’||ch==’(’){ C.Push(ch); //优先级高直接入栈 } //遍历操作遇到# else if(ch==’#’){ break; } else{ cout<<endl<<“输入格式错误,没有以#结尾”<<endl; return; } cin>>ch; }//最后,若栈不是空的,依次输出栈中元素 while(top!=-1){ outch=C.Pop(); cout<<outch; }

运行不出来就很烦 害 有错误
最新回复(0)