这个程序是转专业后写的第一个作业,除了Debug阶段有点吃力,大体还是没什么问题
void multiplication(NODE *head1,NODE *head2,NODE *head3)
{
NODE *p1,*p2,*p3,*p4,*p5;
int coe,ex;
for (p1=head1->next; p1!=NULL; p1=p1->next) {
p3=head3;
for (p2=head2->next; p2!=NULL; p2=p2->next) {
coe=(p1->coef)*(p2->coef);
ex=(p1->exp)+(p2->exp);
for (; (p3->next==NULL)?0:p3->next->exp<ex; p3=p3->next) {
continue;
}
if (p3->next==NULL) {
p3->next=(NODE *) malloc((sizeof(NODE)));
p3->next->coef=coe;
p3->next->exp=ex;
p3->next->next=NULL;
}
else if (p3->next->exp==ex)
{
p3->next->coef=p3->next->coef+coe;
}
else if((p3->next->exp)>ex)
{
NODE *p4=(NODE *) malloc(sizeof(NODE));
p4->coef=coe;
p4->exp=ex;
p4->next=p3->next;
p3->next=p4;
}
}
}
p5=head3;
while(p5->next!=NULL){
if (p5->next->coef==0) {
p4=p5->next;
if (p5->next->next==NULL) {
p5->next=NULL;
}
else {
p5->next=p5->next->next;
}
free(p4);
}
else p5=p5->next;
}
if (head3->next==NULL) {
p4=(NODE*) malloc(sizeof(NODE));
p4->coef=0;
p4->exp=0;
p4->next=NULL;
head3->next=p4;
}
}
程序效率并不是很好,排名也比较靠后,但总体思路,就是先全部遍历乘法,然后判断为0的项并剥去
希望能得到指点。