循环链表实现两个多项式相加主要代码


A=a1+b1*X+c1*X^2+d1*X^3+...

B=a2+b2*X+c2*X^2+d2*X^3+...

C=(a1+a2)+(b1+b2)*X+(c1+c2)*X^2+(d1+d2)*X^3+...

 1 typedef int datatype;
 2 
 3 typedef struct node{
 4     float coef;//系数
 5     int exp;//指数
 6     struct pnode *next; 
 7 } polynode;
 8 polynode *POLYADD(polynode *A,polynode *B){//A,B是两个多项式,函数返回A,B的多项式 
 9     int i,j,k;
10     polynode *ptr,   
11              *q,     //指向和多项式C的指针 
12              *q1,    //指向A多项式的指向 
13              *q2;    //指向B多项式的指向 
14     float x;
15     q1=A;
16     q2=B;
17     q=malloc(sizeof(polynode));   //生成多项式的头节点
18     q->coef=0;                    //将多项式的头节点赋值
19     q->exp=-1;
20     q->next=q;                    //循环链表
21     ptr=q;                        //ptr指向和多项式的头节点
22     q1=q1->next;                  //q1指向A的第一个节点
23     q2=q2->next;                  //q2指向B的第一个节点
24     while((q1!=A)&&(q2!=B)){
25         //从低指数到搞指数逐项求和
26         if(q1->exp==q2->exp){     //指数相同的项
27            x=q1->coef+q2->coef;   //系数相加
28            if(x!=0){
29                q->next=malloc(sizeof(polynode));
30                q=q->next;
31                q->coef=x;
32                q->exp=q1->exp;
33               } 
34         q1=q1->next;              //q1指向A的下一个节点
35         q2=q2->next;              //q2指向B的下一个节点            
36         } 
37         else{
38             //指向不同的项
39             q->next=malloc(sizeof(polynode));
40             q=q->next;
41             if(q1->exp>q2->exp){   //如果A多项式当前项的指数大于B的
42                q->coef=q2->coef;
43                q->exp=q2->exp;
44                q2=q2->next;                 
45             } 
46             else{
47                 q->coef=q1->coef;  //如果B多项式当前项的指数大于A的
48                 q->exp=q1->exp;
49                 q1=q1->next;
50             }
51         }        
52     } 
53     while(q1!=A){
54                q->next=malloc(sizeof(polynode));
55             q=q->next;
56             q->coef=q1->coef;
57             q->exp=q1->exp;
58             q1=q1->next;    
59           }
60    while(q2!=B){
61                   q->next=malloc(sizeof(polynode));
62             q=q->next;
63             q->coef=q2->coef;
64             q->exp=q2->exp;
65             q2=q2->next;
66           }
67    q->next=ptr;   //令多项式最末的节点指向头节点
68    return ptr;    //返回多项式头节点指针 
69 }
View Code
原文地址:https://www.cnblogs.com/aijianiula/p/3094130.html