• 02-线性结构2 一元多项式的乘法与加法运算 ---多项式求和问题


    用链表实现多项式的求和问题

    设计函数分别求两个一元多项式的乘积与和。

    输入格式:

    输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。

    输出格式:

    输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0

    输入样例:

    4 3 4 -5 2  6 1  -2 0
    3 5 20  -7 4  3 1
    

    输出样例:

    15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
    5 20 -4 4 -5 2 9 1 -2 0
      1 #include <stdio.h>
      2 
      3 typedef struct Polynode
      4 {
      5     int coef;
      6     int expp;
      7     struct Polynode * next;
      8 }Polynode, * Polylist;
      9 
     10 // t表示项数
     11 Polylist PolyCreat(int t)
     12 {
     13     Polynode * head, * rear, *s;
     14     int c, e, i = 0;
     15     head = (Polynode *)malloc(sizeof(Polynode));
     16     rear = head;
     17     while(i < t)
     18     {
     19         s = (Polynode *)malloc(sizeof(Polynode));
     20         scanf("%d %d", &c, &e);
     21         s->coef = c;
     22         s->expp = e;
     23         rear->next = s;
     24         rear = s;
     25         i ++;
     26     }
     27     rear->next = NULL;
     28     return head;
     29 }
     30 
     31 void Polyprint(Polynode * head)
     32 {
     33     Polynode * p = head->next;
     34     while(p != NULL)
     35     {
     36         printf("%d %d ", p->coef, p->expp);
     37         p = p->next;
     38     }
     39 }
     40 
     41 // 多项式求和
     42 Polylist PolyAdd(Polylist p1, Polylist p2)
     43 {
     44     Polylist h = PolyCreat(0);
     45     Polylist p = p1->next, q = p2->next, tail = h, temp;
     46     int sum = 0;
     47     while(p != NULL && q != NULL)
     48     {
     49         if(p->expp > q->expp) //p的指数大于q的指数时,将p结点加入到和多项式
     50         {
     51             tail->next = p;
     52             tail = p;
     53             p = p->next; 
     54         }
     55         else if(p->expp == q->expp)
     56         {
     57             sum = p->coef + q->coef;
     58             if(sum != 0)
     59             {
     60                 p->coef = sum;
     61                 tail->next = p;
     62                 tail = p;
     63                 p = p->next;
     64                 temp = q;
     65                 q = q->next;
     66                 free(temp);
     67             }
     68             else
     69             {
     70                 temp = p; p = p->next; free(p);
     71                 temp = q; q = q->next; free(q);
     72             }
     73         }
     74         else
     75         {
     76             tail->next = q;
     77             tail = q;
     78             q = q->next;
     79         }
     80     }
     81     if(p != NULL)
     82         tail->next = p;
     83     else
     84         tail->next = q;
     85     return h;
     86 }
     87 
     88 int main(int argc, char const *argv[])
     89 {
     90     int a, b;
     91     Polylist p1, p2;
     92     scanf("%d", &a);
     93     p1 = PolyCreat(a);
     94     scanf("%d", &b);
     95     p2 = PolyCreat(b);
     96     Polyprint(p1);
     97     puts("
    ");
     98     Polyprint(p2);
     99     puts("
    ");
    100     Polyprint(PolyAdd(p1, p2));
    101     puts("
    ");
    102     return 0;
    103 }
    题目如下,我只实现了多项式的求和问题

    
    
  • 相关阅读:
    日常学习随笔-数组、单链表、双链表三种形式实现队列结构的基本操作(源码注释)
    代码重构之单元测试
    C# yield return 用法与解析
    MVC学习手册之数据注解与验证
    C#数字图像处理算法学习笔记(三)--图像几何变换
    关于变量名与类名同名问题
    C# 计时器
    C#入门--索引器
    C#入门--字段与属性
    var与dynamic
  • 原文地址:https://www.cnblogs.com/hello-lijj/p/6593963.html
Copyright © 2020-2023  润新知