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

该博客介绍了如何利用C++的队列数据结构来实现两个一元多项式的相加操作。首先定义了一个包含系数和指数的结构体`MulaData`,然后创建了`PolyAdd`类,包含建立多项式、输出多项式和多项式相加的方法。在`addFormula`函数中,通过比较两个多项式的指数进行相加。最后,给出了测试函数`main`,用于输入多项式并展示相加结果。
摘要由CSDN通过智能技术生成

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

文章完整代码下载链接https://github.com/Junzhou-Chen/Addition-of-unary-polynomials

一元多项式节点定义

一元多项式的一般结构如下
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;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

早安不安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值