A1
(1)问题定义
表达式转换
(2) 问题分析
我们日常使用的算术表达式是采用中缀表示法。现在要设计程序,输入中缀表达式,转换为后缀表达式输出。
中缀表示法的二元运算符位于两个运算数中间,而后缀表示法的二元运算符位于两个运算符之后。
要实现此操作,需建立一个栈。遍历输入的中缀表达式,当:
1.字符为数字时
直接送入后缀表达式
2.字符为左括号时
入栈,并且优先级降至最低
3.字符为右括号时
直接出栈,将出栈的字符依次送入后缀表达式,直到栈顶为左括号,将左括号直接出栈,不送入表达式。
4.字符为运算符时
如果栈为空或者该字符的优先级大于栈顶,入栈。
否则,将栈内的字符依次送入后缀表达式,直到满足上述条件。
输入和输出的表达式都存储在数组中
(3)概要设计
数据结构设计
const int stacksize=20 //由题得输入的表达式不超20个字符
template <typename datatype> //定义模板类seqstack
class seqstack{
public:
seqstacck(); //初始化一个空栈
void push(datatype x); //入栈操作
datatype pop(); //出栈操作
datatype gettop(); //取栈顶的元素
int empty();//判断栈是否为空
transformation(str,post)//转换
private:
datatype data[stacksize]; //存放栈元素的数组
int top; //栈顶元素在数组的下标
}
int main(){
char str[];
char post[];
cout<<.......<< //输入中缀表达式
getline(str) //将中缀表达式其存储在字符串变量 str
中
transformation(str,post)// 转换
cout<<........<< //输出后缀表达式
return 0;
}