1、基本思路
采用不带头结点的单向链表,按照指数递减的顺序排列各项。
算法思路:
a、两个指针P1和P2分别指向这两个多项式第一个结点,不断循环:
i、P1->expon == P2->expon : 系数相加,如果结果不为0,则作为多项式对应项系数,同时,P1和P2都分别指向下一项。
ii、P1->expon > P2->expon : 将P1的当前项存入多项式,并让P1指向下一项
iii、P1->expon < P2->expon :将P2的当前项存入结果多项式,并让P2指向下一项。
b、当某一多项式处理完后,将另一个多项式的所有结点依次复制到结果多项式中去。
2、具体实现
2.1 基本数据结构
/* 多项式的基本数据结构 */
typedef struct PolyNode
{
int coef; // 系数
int expon; // 指数
struct PolyNode *link; // 指向下一个节点的指针
}*Polynomial;
由于使用的是单链表的操作来实现具体的多项式求和问题,所以基本的插入操作可以参考这篇文章 http://blog.csdn.net/tech_pro/article/details/78011875的链式存储单向链表的简单实现。
2.2 多项式相加操作
/* 实现多项式P1和P2相加 */
Polynomial PolyAdd (Polynomial P1, Polynomial P2)
{
Polynomial front, rear, temp;
int sum;
rear = (Polynomial) malloc(sizeof(str