0
点赞
收藏
分享

微信扫一扫

队列实现两个一元多项式的相加算法

萧让听雪 2022-04-26 阅读 72

队列实现两个一元多项式的相加算法

文章完整代码下载链接https://github.com/BilboJunzhou/PolyAdd.git

一元多项式节点定义

一元多项式的一般结构如下
f ( x ) = a n x n + a n − 1 x n − 1 + … + a 0 . f(x)= a_nx^{n}+a_{n-1}x^{n-1}+…+a_0. f(x)=anxn+an1xn1++a0.
包括系数和指数
所以结构体定义为

struct MulaData
{
	double num_1;// 系数
	int num_2;	 // 指数
};

通过队列将结构体串联起来即可

具体方法实现


// 相关方法
class PolyAdd {
public:
	queue<MulaData> setFormula();// 建立一元多项式
	void showFormula(queue<MulaData> formula);// 输出一元多项式
	queue<MulaData> addFormula(queue<MulaData> formulaOne, queue<MulaData> formulaTwo);// 一元多项式相加
};

// 建立一元多项式
queue<MulaData> PolyAdd::setFormula()
{
	queue<MulaData> formula;
	MulaData Num_Get;
	std::cin >> Num_Get.num_1;
	while (Num_Get.num_1 != -1)
	{
		std::cin >> Num_Get.num_2;
		formula.push(Num_Get);
		std::cin >> Num_Get.num_1;
	}
	cout << "创建结束" << endl;
	return formula;
}

// 输出一元多项式
void PolyAdd::showFormula(queue<MulaData> formula)
{
	MulaData showNum;
	while (!formula.empty())
	{
		showNum = formula.front();
		formula.pop();
		cout << showNum.num_1 << "x^" << showNum.num_2;
		if (!formula.empty()) cout << '+';
	}
	cout << '\n';
}

// 一元多项式相加
queue<MulaData> PolyAdd::addFormula(queue<MulaData> formulaOne, queue<MulaData> formulaTwo)
{
	MulaData Save_1, Save_2;
	queue<MulaData> result_Res;
	// 当两者不为空
	while ((!formulaOne.empty()) && (!formulaTwo.empty())) {
		Save_1 = formulaOne.front(); 
		Save_2 = formulaTwo.front();
		if (Save_1.num_2 == Save_2.num_2) {
			Save_1.num_1 += Save_2.num_2;
			result_Res.push(Save_1);
			formulaOne.pop();
			formulaTwo.pop();
		}
		else if (Save_1.num_2 >= Save_2.num_2) {
			result_Res.push(Save_1);
			formulaOne.pop();
		}
		else {
			result_Res.push(Save_2);
			formulaTwo.pop();
		}
	}
	// 其中之一为空
	if (formulaOne.empty()) {
		while (!formulaTwo.empty()) {
			result_Res.push(formulaTwo.front());
			formulaTwo.pop();
		}
	}
	else {
		while (!formulaOne.empty()) {
			result_Res.push(formulaOne.front());
			formulaOne.pop();
		}
	}
	return result_Res;
}

测试函数

int main() {
	queue<MulaData> formula_1;
	queue<MulaData> formula_2;
	queue<MulaData> resultFor;
	PolyAdd RunWay;
	cout << "建立第一个一元多项式,输入-1停止建立:\n" << endl;
	formula_1 = RunWay.setFormula();
	cout << "建立第二个一元多项式,输入-1停止建立:\n" << endl;
	formula_2 = RunWay.setFormula();
	cout << "建立结果为:\n" << endl;
	RunWay.showFormula(formula_1);
	RunWay.showFormula(formula_2);
	cout << "相加结果为:\n" << endl;
	resultFor = RunWay.addFormula(formula_1, formula_2);
	RunWay.showFormula(resultFor);
	return 0;
}
举报

相关推荐

0 条评论