况 况
q1=p1;q2=p2; h=k=new node; while(q1 && q2) { } if(q2)
k->next=q2; t=h; h=h->next;
if(q1->expn==q2->expn)//指数相同的情况 { }
else if(q1->expn>q2->expn)//第一项的指数比第二项指数大的情{ }
else if(q1->expn
q1=q1->next; k=k->next; k->next=q2; t=q2->next; q2->next=q1; k=k->next; q2=t;
q1->coef=q1->coef+q2->coef; q1=q1->next; k=k->next; t=q2; q2=q2->next; delete t;
k->next=p1;
- 23 -
}
delete t; return h;
⑦ 编写乘法运算处理函数,具体代码如下: node *multiply(node *p1,node *p2) {
node *i,*j,*k,*s,*l,*m,*n;//乘法算法 i=p1; j=p2;
m=j;//保存j的头结点 k=f(0,0);
//保存k为头结点 {
j=m;
while(j)//乘法计算算法,并实现升序排序 {
l=f(0,0);//新计算结果保存在一个单独结点中,用于对之前生成的l->coef=(i->coef)*(j->coef); l->expn=(i->expn)+(j->expn);
;
s=k->next;//s用于对链表的遍历,n为s前驱 while(s) {
if(l->expn==s->expn) { }
else if(l->expn
n->next=l; s->coef+=l->coef; delete l; break;
while(i)//创建乘法计算结果链表,形成头结点为k的链表
链表进行对比,形成升序排列
n=k
- 24 -
}
}
}
}
}
l->next=s; break;
else { }
n=n->next; s=s->next;
if(s==NULL) { } j=j->next;
n->next=l;
i=i->next;
return k->next;
⑧ 编写构造多项式具体代码如下: struct node {
node *f(int a,float b) {
node *p=new node; int expn; float coef; node *next;
};//结点结构体
- 25 -
p->coef=b; p->expn=a; p->next=NULL; return p;
}//创建结点
node *copy(node *p)//复制链表的函数 {
node *h,*d,*q,*k,*s;
h=f(0,0);//创建头结点,留空,为了能得到与新创建的结点对比的结点(即是k)的前驱
q=p; while(q) {
d=f(q->expn,q->coef);//创建新结点
s=h;k=s->next;//s是前驱,k是与d做比较的 while(k) { } if(!k)
if(k->expn==d->expn) { }
else if(k->expn
else if(k->expn>d->expn) { }
s->next=d; d->next=k; break; k=k->next; s=s->next;
k->coef+=d->coef;delete d;break;
- 26 -
}
}
{ } q=q->next;
s->next=d;
return h->next;
6.2 程序测试
运行程序后,首先出现的界面如图8所示。
图8 程序初始运行界面
单击添加按钮后,可将多项式在界面上显示出来,如图9所示。
- 27 -