问答题
假设对于一个多项式(Polynomial)
P(x)=a
m-1
+a
m-2
+…+a
0
用长度为m的单链表表示为(t
m-1
,t
m-2
,t
m-3
,…,t
1
,t
0
)。其中,m是多项式P(x)中非零项(term)的个数,每一个t
i
(0≤i≤m-1)是P(x)的一个非零项,它由三个数据成员coef、exp和link组成,coef是系数(浮点型),exp是指数(整型),link是链接指针。各个项的指数e
i
按递减顺序排列:e
m-1
>e
m-2
>…>e
0
>0。
问答题
试描述多项式的数据结构(m可以不出现在定义中)。
【正确答案】
【答案解析】一元多项式的结构定义:
Typedef struct Term{
float coef;int exp;
struct Term
*
link:
}
*
Polynomial;
问答题
给出在多项式中插入新项的算法Insert。该算法的功能是:如果多项式中没有与新项的指数相等的项,则将此新项插入到多项式链表的适当位置;如果多项式中已有与新项的指数相等的项,则将它们合并。
【正确答案】
【答案解析】多项式的插入算法:
void Insert(Polynomial first,float c,int e){
//在多项式链表first中插入系数为c,指数为e的新项
Term
*
pa=first,
*
pb=NULL;
while(pa!=NULL&&pa->exp>e){pb=pa;pa=pa->link;}
if(pa->exp==e){ //多项式中有与新项指数相等的项
if(pa->coef+c!=0)pa->coef=pa->coef+c; //合并
else{pb->link=pa->link;delete pa;} //或删除
}
else{ //多项式中无与新项指数相等的项
Term
*
pc=new Term; //创建
pc->exp=e,pc->coef=c;
if(pb==NULL){pc->link=first;first=pc;}
//链接:在首部
else{pb->link=pc;pc->link=pa;} //链接:在链中
}
}
问答题
利用这个插入算法给出多项式乘法的实现算法。
【正确答案】
【答案解析】多项式乘法的实现算法:
void MUL(Polynomial &A,Polynomial &B,Polynomial &C){
//计算C=A×B.
Term
*
pa,
*
pb;
pb=B;c=NULL;
while(pb!=NULL){
pa=A;
while(pa!=NULL){
Insert(c,pa->coef*pb->coef,pa->exp+pb->exp);
pa=pa->link;
}
pb=pb->link;
}
}