问答题 假设对于一个多项式(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;
}
}