栈和栈的应用(后缀表达式的转化和简单计算器)


目录

    • 栈的特点
    • 栈的常用方法
      • 初始化
      • 判断是否为空栈
      • 入栈
      • 出栈
      • 返回栈顶元素
      • 返回栈中元素数量
  • 栈的应用
    • 后缀表达式的转化
    • 简单计算器

1,输入一个包含圆括号、加、减、乘、除、求余等符号组成的算术表达式字符串,输出该算术表达式的值。要求:
(1)系统至少能实现加、减、乘、除、求余等运算;
(2)利用栈的后进先出特性实现;
(3)先将输入的算术表达式转换为后缀表达式,并输出后缀表达式;
(4)利用后缀表达式输出表达式的计算结果。

关键代码:

处理算术表达式

void manage(string input){
	stack<int> number;
	stack<char> sign;
	int count=0;
	double result=0;
	string houzhui;
	while(count<input.length()){
		//判断字符还是数字
		bool yes=isSign(input[count]);
		if(yes){
			manageChar(input[count],number,sign,houzhui);
		}else{
			number.push(input[count]-'0');
			houzhui+=input[count]; 
		}
		count++;
	}
	while(!sign.empty()){
		houzhui+=sign.top();
		calculate(number,sign.top());
		sign.pop();
	}
	cout<<"后缀表达式为:"; 
	cout<<houzhui<<endl;
	cout<<"计算结果为:";
	cout<<number.top()<<endl; 
}

处理字符

void manageChar(char input,stack<int> &number,stack<char> &sign,string &houzhui){ 
	if(sign.empty()||input=='('){
		sign.push(input);
	}else if(input==')'){
		while(sign.top()!='('&&!sign.empty()){
			houzhui+=sign.top();
			calculate(number,sign.top());
			sign.pop();	 
		}
		sign.pop();//弹出'('
	}else{
		 if(charWeight(input)>charWeight(sign.top())){
			sign.push(input);
		}else{
			
			do{
				houzhui+=sign.top();
				calculate(number,sign.top());
				sign.pop();
			}while(charWeight(input)<=charWeight(sign.top()));
			sign.push(input);
		}
	} 
}

运算

void calculate(stack<int> &number,char input){
	int firstNum,secondNum;
	firstNum=number.top();
	number.pop();
	secondNum=number.top();
	number.pop();
	switch(input){
	case '+':firstNum+=secondNum;break;
	case '-':firstNum=secondNum-firstNum;break;
	case '*':firstNum*=secondNum;break;
	case '/':firstNum=secondNum/firstNum;break;
	case '%':firstNum=secondNum%firstNum;break;
	default:cout<<"出错了!!!";		
	}
	number.push(firstNum);
}

运行截图
计算器运行截图


  1. 完整代码点击这里。 ??

相关