中缀转后缀——数据结构考研测试程序版本

本文便于大家来测试中缀转后缀的代码 有的考研学校比较复杂 在网上也没找到 这个应该是对的

#include 
#include 
#include 

// 定义运算符的优先级
int precedence(char op) {
	if (op == '+' || op == '-')
		return 1;
	if (op == '*' || op == '/')
		return 2;
	return 0;
}

// 将中缀表达式转换为后缀表达式
std::string infixToPostfix(const std::string& infix) {
	std::string postfix;
	std::stack<char> operatorStack;

	for (char ch : infix) {
		// 如果是字母或数字,直接添加到后缀表达式中
		if (isalnum(ch)) {
			postfix += ch;
		}
		// 如果是左括号,入栈
		else if (ch == '(') {
			operatorStack.push(ch);
		}
		// 如果是右括号,将栈中的运算符弹出,直到遇到左括号
		else if (ch == ')') {
			while (!operatorStack.empty() && operatorStack.top() != '(') {
				postfix += operatorStack.top();
				operatorStack.pop();
			}
			// 弹出左括号
			if (!operatorStack.empty() && operatorStack.top() == '(') {
				operatorStack.pop();
			}
		}
		// 如果是运算符
		else {
			// 弹出栈中优先级更高或相等的运算符,并添加到后缀表达式中
			while (!operatorStack.empty() && precedence(operatorStack.top()) >= precedence(ch)) {
				postfix += operatorStack.top();
				operatorStack.pop();
			}
			// 当前运算符入栈
			operatorStack.push(ch);
		}
	}

	// 将栈中剩余的运算符弹出,添加到后缀表达式中
	while (!operatorStack.empty()) {
		postfix += operatorStack.top();
		operatorStack.pop();
	}

	return postfix;
}

int main() {
	std::string infixExpression;
	std::cout << "Enter an infix expression: ";
	std::getline(std::cin, infixExpression);

	std::string postfixExpression = infixToPostfix(infixExpression);
	std::cout << "Postfix expression: " << postfixExpression << std::endl;

	return 0;
}

中缀转后缀——数据结构考研测试程序版本_第1张图片

你可能感兴趣的:(测试,数据结构)