顺序链式一元多项式加法减法乘法运算的实现Word文档下载推荐.docx
《顺序链式一元多项式加法减法乘法运算的实现Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《顺序链式一元多项式加法减法乘法运算的实现Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。
*************************************************
*请选择(0-5):
1.2数据结构设计
根据下面给出的存储结构定义:
#defineMAXSIZE20//定义线性表最大容量
//定义多项式项数据类型
typedefstruct
{
floatcoef;
//系数
intexpn;
//指数
}term,elemType;
termterms[MAXSIZE];
//线性表中数组元素
intlast;
//指向线性表中最后一个元素位置
}SeqList;
typedefSeqListpolynomial;
1.3基本操作函数说明
polynomial*Init_Polynomial();
//初始化空的多项式
intPloynStatus(polynomial*p)
//判断多项式的状态
intLocation_Element(polynomial*p,termx)
在多项式p中查找与x项指数相同的项是否存在
intInsert_ElementByOrder(polynomial*p,termx)
//在多项式p中插入一个指数项x
intCreatePolyn(polynomial*P,intm)
//输入m项系数和指数,建立表示一元多项式的有序表p
charcompare(termterm1,termterm2)
//比较指数项term1和指数项term2
polynomial*addPloyn(polynomial*p1,polynomial*p2)
//将多项式p1和多项式p2相加,生成一个新的多项式
polynomial*subStractPloyn(polynomial*p1,polynomial*p2)
//多项式p1和多项式p2相减,生成一个新的多项式
polynomial*mulitPloyn(polynomial*p1,polynomial*p2)
//多项式p1和多项式p2相乘,生成一个新的多项式
voidprintPloyn(polynomial*p)
//输出在顺序存储结构的多项式p
1.4程序源代码
#include<
stdlib.h>
stdio.h>
iostream.h>
#defineNULL0
#defineMAXSIZE20
voidprintPloyn(polynomial*p);
if(p==NULL)
{
return-1;
}
elseif(p->
last==-1)
return0;
else
return1;
}
polynomial*Init_Polynomial()
polynomial*P;
P=newpolynomial;
if(P!
=NULL)
P->
last=-1;
returnP;
returnNULL;
voidReset_Polynomial(polynomial*p)
if(PloynStatus(p)==1)
p->
inti=0;
if(PloynStatus(p)==-1)
while(i<
=p->
last&
&
p->
terms[i].expn!
=x.expn)
i++;
if(i>
p->
last)
intj;
if(p->
last==MAXSIZE-1)
cout<
<
"
Thepolymisfull!
endl;
j=p->
last;
while(p->
terms[j].expn<
x.expn&
j>
=0)
terms[j+1]=p->
terms[j];
j--;
terms[j+1]=x;
last++;
termx;
if(PloynStatus(P)==-1)
if(m>
MAXSIZE)
printf("
顺序表溢出\n"
);
请依次输入%d对系数和指数...\n"
m);
for(inti=0;
i<
m;
i++)
{
scanf("
%f%d"
&
coef,&
expn);
x.coef=coef;
x.expn=expn;
if(!
Location_Element(P,x))
{
Insert_ElementByOrder(P,x);
}
}
return1;
if(term1.expn>
term2.expn)
return'
>
'
;
elseif(term1.expn<
='
inti,j,k;
i=0;
j=0;
k=0;
if((PloynStatus(p1)==-1)||(PloynStatus(p2)==-1))
polynomial*p3=Init_Polynomial();
=p1->
j<
=p2->
switch(compare(p1->
terms[i],p2->
terms[j]))
case'
:
p3->
terms[k++]=p1->
terms[i++];
break;
terms[k++]=p2->
terms[j++];
if(p1->
terms[i].coef+p2->
terms[j].coef!
{
terms[k].coef=p1->
terms[j].coef;
terms[k].expn=p1->
terms[i].expn;
k++;
}
i++;
j++;
p3->
returnp3;
inti;
if((PloynStatus(p1)!
=1)||(PloynStatus(p2)!
=1))
p3->
last=p2->
for(i=0;
terms[i].coef=-p2->
terms[i].coef;
terms[i].expn=p2->
p3=addPloyn(p1,p3);
intk;
polynomial**p=newpolynomial*[p2->
last+1];
for(k=0;
k<
k++)
p[k]=Init_Polynomial();
p[k]->
last=p1->
for(j=0;
j<
j++)
p[k]->
terms[j].coef=p1->
terms[j].coef*p2->
terms[k].coef;
p[k]->
terms[j].expn=p1->
terms[j].expn+p2->
terms[k].expn;
p3=addPloyn(p3,p[k]);