多项式加法
要求:有两组多项式,每组随机输入N组数,每组数输入两个值a,b,a代表系数,b代表指数,输入数据无任何限制(只要是数字即可)
思路:
1.建立两个链表L1,L2分别存放两组多项式
2.比较每组多项式,如果指数相同就把他们系数相加(详解在下面)
3.打印输出
比较的详解:
在存放多项式的时候对存入数据进行排序,按指数从大到小或者从小到大都可,我是按从大到小排的。
然后建立三个指针分别是指向L1的指针,指向L2的指针和指向L1的工作指针,工作指针指向L1是借助L1来存放加完之后的多项式链表。
接着比较两个多项式的指数,如果指数相同就相加系数,移动指针,具体移动方式在代码中都有备注
所有加法做完后,因为对输入数据没有要求,可能出现多个重复相等的指数项,通过查重的方式来删除掉后续重复结点
代码
#include <iostream>
#include <cstdlib>
using namespace std;
typedef struct PNode{
int coe; //系数
int index; //指数
struct PNode *next; //后继结点指针
}PNode,*Polynomial;
bool CreatePoly(Polynomial *L);
void ShowPoly(Polynomial L);
bool AddPoly(Polynomial *La,Polynomial *Lb);
Polynomial RecurseDelete(Polynomial L);
int main()
{
Polynomial L1,L2;
cout << "Create L1\n";
CreatePoly(&L1);
cout << "Create L2\n";
CreatePoly(&L2);
cout << "Show L1: ";
ShowPoly(L1);
cout << "Show L2: ";
ShowPoly(L2);
cout << "Add Done.\n";
cout << "L1+L2 is: ";
AddPoly(&L1,&L2);
ShowPoly(L1);
return 0;
}
bool CreatePoly(Polynomial *L)
{
*L = new PNode; //新建头结点
(*L)->next = NULL; //开空间
PNode *p,*q