#include #include <stdio.h> #include <stdlib.h>

// 定义多项式项结构 typedef struct { float coef; int expn; } term, ElemType;

// 定义多项式链表类型 typedef LinkList polynmial;

// 创建多项式函数 void CreatPolyn(polynomail &P, int m) { // ... 代码省略 ... }

// 销毁多项式函数 void DestroyPolyn(polynomail& P) { // ... 代码省略 ... }

// 打印多项式函数 void PrintPolyn(polynomail P) { // ... 代码省略 ... }

// 多项式加法运算函数 void AddPolyn(polynomial& Pa, polynomial& Pb) { // 获取头节点 ha = GetHead(Pa); hb = GetHead(Pb); // 获取第一个节点 qa = NextPos(Pa, ha); qb = NextPos(Pb, hb);

// 遍历两个多项式链表
while (qa && qb) {
	// 获取当前项的值
	a = GetCurElem(qa); b = GetCurElem(qb);
	// 比较指数
	switch (*cmp(a, b)) {
	case -1:
		// 指数 a 小于 b,将 a 节点作为新的头节点
		ha = qa; qa = NextPos(Pa, qa); break;
	case 0:
		// 指数 a 等于 b,计算系数之和
		sum = a.coef + b.coef;
		// 如果系数之和不为零,更新当前节点系数
		if (sum != 0.0) {
			SetCurElem(qa, sum); ha = qa;
		}
		// 否则删除当前节点
		else {
			DelFirst(ha, qa); FreeNode(qa);
		}
		// 从两个链表中删除当前节点
		DelFirst(hb, qb); FreeNode(qb); qb = NextPos(Pb, hb);
		qa = NextPos(Pa, ha); break;
	case 1:
		// 指数 a 大于 b,将 b 节点插入到 a 节点之前
		DelFirst(hb, qb); InsFirst(ha, qb);
		qb = NextPos(Pb, hb); ha = NextPos(Pa, ha); break;
	}
}
// 如果 Pb 链表未遍历完,将剩余节点追加到 Pa 链表末尾
if (!ListEmpty(Pb)) Append(Pa, qb);
// 释放头节点
FreeNode(hb);

}

// ... 其他函数代码省略 ...

int main() { // ... 测试代码 ... return 0; }

C++ 多项式加法运算的实现:完整代码示例

原文地址: https://www.cveoy.top/t/topic/mIqd 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录