-
多项式相加的各个步骤以及解题分析,请访问以下网址:
-
//实现多项式的运算
#include<iostream>
using namespace std;
typedef struct PNode{
float coef; //系数
int expn; //指数
struct PNode *next;
}PNode,*Polyn;
//创建多项式 实现链表递增
void CreatePolyn(Polyn &L,int n)
{
L=new PNode; //创建带有头结点的空链表
L->next=NULL;
for(int i=0;i<n;i++)
{
Polyn s=new PNode;
cout << "请输入第" << i+1 << "个系数和指数(中间用空格隔开):";
cin >> s->coef >> s->expn;
PNode *pre,*q;
pre=L; //pre指向待找结点前驱
q=L->next; //q指向待找结点
while(q&&q->expn < s->expn)
{
pre=q;
q=q->next;
}
//然后把s插入到pre和q中间
s->next=q;
pre->next=s;
}
}
//遍历取值
void T_GetElem(Polyn L)
{
PNode *p;
p=L->next;
while(p)
{
cout << p->coef << " " << p->expn << endl;
p=p->next;
}
}
//多项式相加
void AddPolyn(Polyn &A,Polyn &B)
{
PNode *p1,*p2,*p3;
p1=A->next;p2=B->next;
p3=A;
while(p1&&p2)
{
if(p1->expn==p2->expn)
{
int sum=p1->coef+p2->coef;
//如果和等于0 销毁p1 p2
//否则 销毁p2,改变p1的指数值
if(sum==0)
{
PNode *r=p1;p1=p1->next;delete r;
PNode *w=p2;p2=p2->next;delete w;
}
else
{
p1->coef=sum;
PNode *r=p2;p2=p2->next;delete r;
//把p1链在p3之后,再更新p3
p3->next=p1;
p3=p1;
p1=p1->next;
}
}
else if(p1->expn<p2->expn)
{
//链p1 p1指向下一个结点
p3->next=p1;
p3=p1;
p1=p1->next;
}
else
{
//链p2
p3->next=p2;
p3=p2;
p2=p2->next;
}
}
p3->next=p1?p1:p2;
delete B; //销毁B的表头
}
//A-B
void SubPolyn(Polyn &A,Polyn &B)
{
PNode *p1,*p2,*p3;
p1=A->next;p2=B->next;
p3=A;
while(p1&&p2)
{
if(p1->expn==p2->expn)
{
int sub=p1->coef-p2->coef;
if(sub==0)
{
PNode *r=p1;p1=p1->next;delete r;
PNode *w=p2;p2=p2->next;delete w;
}
else
{
p1->coef=sub;
p3->next=p1;
p3=p1;
p1=p1->next;
PNode *r=p2;
p2=p2->next;
delete r;
}
}
else if(p1->expn < p2->expn)
{
p3->next=p1;
p3=p1;
p1=p1->next;
}
else
{
p2->coef=-p2->coef;
p3->next=p2;
p3=p2;
p2=p2->next;
}
}
if(!p1)
{
p3->next=p2;
p3=p2;
while(p3)
{
p3->coef=-p3->coef;
p3=p3->next;
}
}
else if(!p2)
{
p3->next=p1;
}
delete B;
}
int main()
{
Polyn PA,PB;
int n;
cout << "输入多项式 PA 的项数 :" ;
cin >> n;
CreatePolyn(PA,n);
cout << "多项式PA的各个系数:\n";
T_GetElem(PA);
cout << "------------------------\n";
cout << "输入多项式 PB 的项数 :" ;
cin >> n;
CreatePolyn(PB,n);
cout << "多项式PB的各个系数:\n";
T_GetElem(PB);
cout << "------------------------\n";
cout << "现在你可以做一个选择:\n";
cout << "1、PA+PB\n2、PA-PB\n3、PB-PA\n0、退出程序\n";
cin >> n;
switch(n)
{
case 1:
AddPolyn(PA,PB);
cout << "相加后的各项:\n";
T_GetElem(PA);
break;
case 2:
cout << "PA-PB后的各项:\n";
SubPolyn(PA,PB);
T_GetElem(PA);
break;
case 3:
cout << "PB-PA后的各项:\n";
SubPolyn(PB,PA);
T_GetElem(PB);
break;
case 0:
exit(0);
}
return 0;
}