#include<iostream>
using namespace std;
#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int ElemType;
typedef int Status;
typedef struct PNode{
float coef;//系数
int expn;//指数
struct PNode *next;//指针域
}PNode,*Polynomial;
//多项式的创建,其中n为多项式中项的个数
void CreatePolyn(Polynomial &P,int n)
{ //输入m项的系数和指数,建立表示多项式的有序链表P
PNode *s,*pre,*q;
P=new PNode;
P->next=NULL; //先建立一个带头结点的单链表
for(int i=1;i<=n;++i) //依次输入n个非零项
{
s=new PNode; //生成新结点
cout<<"请输入第"<<i<<"项的系数和指数(中间用空格)输完回车:" ;
cin>>s->coef>>s->expn; //输入系数和指数
pre=P; //pre用于保存q的前驱,初值为头结点
q=P->next; //q初始化,指向首元结点
while(q&&q->expn<s->expn) //找到第一个大于输入项指数的项*q
{
pre=q;
q=q->next;
}
s->next=q; //将输入项s插入到q和其前驱结点pre之间
pre->next=s;
}
}
//算法2.19 多项式的相加
void AddPolyn(Polynomial &Pa, Polynomial &Pb)
{
//多项式加法:Pa=Pa+Pb,利用两个多项式的结点构成“和多项式”
Polynomial r, p1, p2, p3;
float sum;
p1 = Pa->next;
p2 = Pb->next; //p1和p2初值分别指向Pa和Pb的第一个结点
p3 = Pa; //p3指向和多项式的当前结点,初值为Pa
while (p1 && p2) //p1和p2均非空
{
if (p1->expn == p2->expn) //指数相等
{
sum = p1->coef + p2->coef; //sum保存两项的系数和
if (sum != 0) //系数和不为0
{
p1->coef = sum; //修改Pa当前结点p1的系数值为两项系数的和
p3->next = p1;
p3 = p1; //将修改后的Pa当前结点p1链在p3之后,p3指向p1
p1 = p1->next; //p1指向后一项
r = p2;
p2 = p2->next;
delete r; //删除Pb当前结点r
} else //系数和为0
{
r = p1;
p1 = p1->next;
delete r; //删除Pb当前结点p1
r = p2;
p2 = p2->next;
delete r; //删除Pb当前结点p2
}
} else if (p1->expn < p2->expn) //Pa当前结点p1的指数值小
{
p3->next = p1; //将p1链在p3之后
p3 = p1; //p3指向p1
p1 = p1->next; //p1指向后一项
} else //Pa当前结点p2的指数值小
{
p3->next = p2; //将p2链在p3之后
p3 = p2; //p3指向p2
p2 = p2->next; //p2指向后一项
}
} //while
p3->next = p1 ? p1 : p2; //插入非空多项式的剩余段
delete Pb; //释放Pb的头结点
} //AddPolyn
int main()
{
PNode *p,*q,*p1;
Polynomial polya,polyb;
int La_n,Lb_n;//分别代表多项式A和B中项的个数
cout<<"按照以下步骤建立多项式A"<<endl;
cout<<"请输入多项式A中的项个数La_n=";
cin>>La_n;
CreatePolyn(polya,La_n);
p=polya->next;
while(p!=NULL)
{
cout<<"系数为"<<p->coef<<" "<<"指数为"<<p->expn<<endl;
p=p->next;
}
cout<<"多项式A建立完成!"<<endl;
cout<<"--------------------------"<<endl;
cout<<"按照以下步骤建立多项式B"<<endl;
cout<<"请输入多项式B中的项个数Lb_n=";
cin>>Lb_n;
CreatePolyn(polyb,Lb_n);
q=polyb->next;
while(q!=NULL)
{
cout<<"系数为"<<q->coef<<" "<<"指数为"<<q->expn<<endl;
q=q->next;
}
cout<<"多项式B建立完成!"<<endl;
cout<<"--------------------------"<<endl;
AddPolyn(polya,polyb);
p1=polya->next;
cout<<"多项式A和B相加的结果为:"<<endl;
while(p1!=NULL)
{
cout<<"系数为"<<p1->coef<<" "<<"指数为"<<p1->expn<<endl;
p1=p1->next;
}
return 0;
}
一元多项式建立相加(17计科班教学用)
最新推荐文章于 2024-04-05 23:06:11 发布