两个一元多项式相加

简介: 两个一元多项式相加
  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 struct PolyNode {
  5     int coefficient;        //系数
  6     int  exponent;            //指数
  7     struct PolyNode* next;
  8 };
  9 
 10 typedef struct PolyNode *Polynomial;
 11 Polynomial p1, p2;
 12 
 13 //初始化一元多项式链表
 14 void InitPolynomial(Polynomial *p);
 15 // 将比较之后的项插入到新链的尾部
 16 void Attach(int c, int e, Polynomial* pRear);
 17 //比较两项指数的大小
 18 int Compare(int exponent1, int exponent2);
 19 //比较两个多项式的各项,依次插入到新项
 20 Polynomial PolyAdd(Polynomial P1, Polynomial P2);
 21 //打印链表的值
 22 void printPolynomial(Polynomial P);
 23 
 24 int main()
 25 {
 26     InitPolynomial(&p1);
 27     InitPolynomial(&p2);
 28     Polynomial p3 = PolyAdd(p1, p2);
 29     printPolynomial(p1);
 30     printPolynomial(p2);
 31     printPolynomial(p3);
 32 
 33     return 0;
 34 }
 35 
 36 
 37 //初始化一元多项式链表
 38 void InitPolynomial(Polynomial *p)        //二级指针
 39 {
 40     
 41     (*p) = (Polynomial)malloc(sizeof(struct PolyNode));
 42     Polynomial head = *p;
 43     int coef, expon;
 44     scanf_s("%d %d", &coef, &expon);
 45     while (coef!=0 && expon != 0)
 46     {
 47         struct PolyNode* node = (struct PolyNode*)malloc(sizeof(struct PolyNode));
 48         node -> coefficient = coef;
 49         node -> exponent = expon;
 50         node->next = NULL;
 51         (*p) ->next = node;
 52         (*p) = node;
 53         scanf_s("%d %d", &coef, &expon);
 54     }
 55     (*p) = head;
 56     (*p) = (*p) -> next;
 57 }
 58 
 59 //将比较之后的项插入到新链的尾部
 60 void Attach(int c, int e, Polynomial *pRear)
 61 {
 62     Polynomial P = (Polynomial)malloc(sizeof(struct PolyNode));
 63     P -> coefficient = c;
 64     P ->exponent = e;
 65     (*pRear)->next = P;
 66     P->next = NULL;
 67     (*pRear) = P;        //因为这里改变了形参pRear的指向,所以参数列表必须传二级指针
 68 }
 69 
 70 int Compare(int exponent1, int exponent2)
 71 {
 72     if (exponent1 == exponent2)
 73         return 0;
 74     else
 75     if (exponent1 > exponent2)
 76         return 1;
 77     return -1;
 78 }
 79 
 80 //比较两个多项式的各项,依次插入到新项
 81 Polynomial PolyAdd(Polynomial P1, Polynomial P2)
 82 {
 83     Polynomial front, rear, temp;
 84     int sum;
 85     rear = front = (Polynomial)malloc(sizeof(struct PolyNode));
 86     while (P1 && P2)
 87     {
 88         switch (Compare(P1->exponent, P2->exponent))
 89         {
 90         case 1:
 91             Attach(P1->coefficient, P1->exponent, &rear);
 92             P1 = P1->next;
 93             break;
 94 
 95         case -1:
 96             Attach(P2->coefficient, P2->exponent, &rear);
 97             P2 = P2->next;
 98             break;
 99 
100         case 0:
101             sum = P1->coefficient + P2->coefficient;
102             if (sum)
103             Attach(sum, P1->exponent, &rear);
104             P1 = P1->next;
105             P2 = P2->next;
106             break;
107         }
108     }
109     for (; P1; P1 = P1->next)
110         Attach(P1->coefficient, P1->exponent, &rear);
111     for (; P2; P2 = P2->next)
112         Attach(P2->coefficient, P2->exponent, &rear);
113 
114     temp = front;
115     front = front->next;
116     free(temp);
117     return front;
118 }
119 
120 void printPolynomial(Polynomial P)
121 {
122     Polynomial node = P;
123     if (P)
124     {
125         for (; node ; node = node->next)
126             printf("%dX^%d ", node->coefficient, node->exponent);
127         printf("\n");
128     }
129     return;
130 }

初始化的函数也可是这样:

 1 //初始化一元多项式链表
 2 void InitPolynomial(Polynomial *p)        //二级指针
 3 {
 4
 5     (*p) = (Polynomial)malloc(sizeof(struct PolyNode));
 6     Polynomial rear = *p;
 7     int coef, expon;
 8     int cnt;
 9     scanf_s("%d", &cnt);
10     while (cnt--)      //多项式的项数
11     {    
12         scanf_s("%d %d", &coef, &expon);
13         Attach(coef, expon, &rear);
14     }
15     Polynomial temp = (*p);
16     (*p) = (*p) -> next; 
17     free(temp);
18 }


相关文章
|
2月前
|
存储 C++
两数相加(C++)
两数相加(C++)
29 0
|
20天前
2.两数相加
2.两数相加
|
2月前
|
存储 弹性计算 运维
对100 以内的所有正整数相加求和
【4月更文挑战第29天】
35 2
|
2月前
|
C++
各位相加(C++)
各位相加(C++)
22 1
|
8月前
一元多项式
一元多项式是指只有一个未知数(通常称为“元”)的多项式。它由一些常数和这个未知数的各次幂的系数组成。例如,3x^2 + 2x - 1 就是一个一元多项式。
88 8
|
2月前
|
存储 C++
[C++/PTA] 矩阵的乘法运算
[C++/PTA] 矩阵的乘法运算
94 0
|
10月前
454. 四数相加 II
454. 四数相加 II
35 0
|
C++
C++ 超大整数相加、相乘的精确求解,以及10000的阶乘
C++ 超大整数相加、相乘的精确求解,以及10000的阶乘
89 0
|
算法
一元多项式相加问题(两种方法)
一元多项式的相加问题,主要运用了线性结构的合并,在合并线性结构的基础上,增加判断,所以我们可以将这个问题理解为一个复杂的线性表合并问题
190 0
一元多项式相加问题(两种方法)
|
存储 算法
经典算法之异或运算(无进位相加)
经典算法之异或运算(无进位相加)
269 0
经典算法之异或运算(无进位相加)

热门文章

最新文章