while(a!=NULL){ PolyList s;s=(PolyList)malloc(sizeof(Node)); s->coef=a->coef;s->exp=a->exp; c->next=s;s->next=NULL; c=c->next;a=a->next; } while(b!=NULL){ PolyList s;s=(PolyList)malloc(sizeof(Node)); s->coef=(-1)*b->coef;s->exp=b->exp; c->next=s;s->next=NULL; c=c->next;b=b->next; }
时间: 2023-04-10 14:04:57 浏览: 59
这段代码是用来实现多项式的加法运算的。其中a和b分别表示两个多项式的头结点,c表示结果多项式的头结点。代码中使用了while循环来遍历两个多项式,并将它们的系数和指数分别赋值给新的节点s,然后将s插入到结果多项式c的末尾。其中第二个while循环中的系数取相反数是为了实现减法运算。
相关问题
void InitPolylist(Polylist *L) { (*L) = NULL; } Polylist CreatePolylist() { Polylist L=NULL, p=NULL, q=NULL; double c; int e; InitPolylist(&L); scanf("%lf%d", &c, &e); while (c != 0) { p=(Polylist)malloc(sizeof(Polynode)); p->coef=c; p->exp=e; p->next=NULL; if(L==NULL) { L=p; } else { q=L; while(q->next!=NULL) q=q->next; q->next=p; } scanf("%lf%d", &c, &e); } return L; } int LengthPolylist(Polylist L) { int n=0; Polylist p=L; while(p!=NULL) { n++; p=p->next; } return n; } void OutputPolylist(Polylist L) { Polylist p=L; if(p!=NULL) { OutputPolylist(p->next); printf("%.2f,%d", p->coef, p->exp); } printf("\n"); } Polylist AddPolylist() { Polylist A=NULL, B=NULL, C=NULL, p=NULL, q=NULL, r=NULL; A=CreatePolylist(); B=CreatePolylist(); InitPolylist(&C); p=A; q=B; while(p!=NULL && q!=NULL) { if(p->exp<q->exp) { r=(Polylist)malloc(sizeof(Polynode)); r->coef=q->coef; r->exp=q->exp; r->next=C; C=r; q=q->next; } else { if(p->exp==q->exp) { if(fabs(p->coef + q->coef)>1e-6) { r=(Polylist)malloc(sizeof(Polynode)); r->coef=p->coef+q->coef; r->exp=p->exp; r->next=C; C=r; } p=p->next; q=q->next; } else { r=(Polylist)malloc(sizeof(Polynode)); r->coef=p->coef; r->exp=p->exp; r->next=C; C=r; p=p->next; } } } while(p!=NULL) { r=(Polylist)ma
lloc(sizeof(Polynode)); r->coef=p->coef; r->exp=p->exp; r->next=C; C=r; p=p->next; } while(q!=NULL) { r=(Polylist)malloc(sizeof(Polynode)); r->coef=q->coef; r->exp=q->exp; r->next=C; C=r; q=q->next; } return C; }
请问这段代码实现了什么功能?
void InitPolylist(Polylist *L) {*L = (Polylist)malloc(sizeof(Polylist)); (*L)->next = NULL; } Polylist CreatePolylist()/*输入多项式的系数和指数,用尾插法建立一元多项式的链表*/ {Polylist L; Polynode *s; InitPolylist(&L); double coef; int exp; Polynode *r = L; scanf("%lf %d",&coef,&exp); while(coef != 0) { s = (Polynode *)malloc(sizeof(Polynode)); s->coef = coef; s->exp = exp; s->next = NULL; r->next = s; r = s; scanf("%lf %d",&coef,&exp); } r->next = NULL; return L; } int LengthPolylist(Polylist L) {Polylist r = L; int n = 0; while(r->next != NULL) { n++; r = r->next; } return n; } void OutputPolylist(Polylist L) { Polylist r = L->next; printf("inlcude %d coef/exp list is:\n",LengthPolylist(L)); while(r != NULL) { printf("%.2f,%d\n",r->coef,r->exp); r = r->next; } } Polylist AddPolylist()/*创建两个多项式并相加,完成后显示序列*/ {Polylist l1 = CreatePolylist(); Polylist l2 = CreatePolylist(); Polylist l3; InitPolylist(&l3); Polynode *s; Polylist r1 = l1->next, r2 = l2->next, r3 = l3; double sum; while(r1 != NULL && r2 != NULL) { s = (Polynode *)malloc(sizeof(Polynode)); if(r1->exp < r2->exp) { s->coef = r1->coef; s->exp = r1->exp; r3->next = s; r3 = s; r1 = r1->next; } else if (r1->exp == r2->exp) { sum = r1->coef + r2->coef; if(sum != 0) { s->coef = sum; s->exp = r1->exp; r3->next = s; r3 = s; r1 = r1->next; r2 = r2->next; } else { return l3; } } else { s->coef = r2->coef; s->exp = r2->exp; r3->next = s; r3 = s; r2 = r2->next; } } if(r1 != NULL){ r3->next = r1; } else { r3->next = r2; } return l3; } void ComputePolylist(Polylist L)/*计算多项式在x=%d的值*/ {Polylist r = L->next; double x = 0; double result = 0; scanf("%lf",&x); while(r != NULL) { result += r->coef * pow(x, r->exp); r = r->next; } printf("ComputePolylist in x=%.2f result is:%.2f\n",x,result); } void DestroyPolylist(Polylist L) { Polynode *p = L ,*q = L->next; while(q) { free(p); p = q; q = q->next; } free(p); printf("destroy"); } 解释一下这个代码
这段代码是一个用于处理一元多项式的链表操作程序。其中,Polylist 是一个指向 Polynode 的指针,而 Polynode 则定义了多项式中的每一个节点,包括系数和指数。程序提供了创建多项式、计算多项式值、相加多项式等功能。具体来说,CreatePolylist 函数用于输入多项式的系数和指数,用尾插法建立一元多项式的链表;AddPolylist 函数用于创建两个多项式并相加,完成后显示序列;ComputePolylist 函数用于计算多项式在给定值 x 上的值;DestroyPolylist 函数用于销毁多项式链表。该程序中的链表操作用到了常见的链表操作技巧,如链表的初始化、节点的创建、节点移动等。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)