C++ 多项式加法运算的实现:完整代码示例
#include
// 定义多项式项结构 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; }
原文地址: https://www.cveoy.top/t/topic/mIqd 著作权归作者所有。请勿转载和采集!