1zhicaigou 2022-05-11 23:26 采纳率: 100%
浏览 52
已结题

通过链表来表示两个多项式之和

首先,建立三个链表储存结构,A用来储存第一个多项式,B用来储存第二个多项式,C用来将A+B的值储存起来

img


然后分别输入两个多项式

img


之后对这两个多项式相加

img


img


img


最后用一个链表C保存两个多项式相加的值

img


这个过程怎么写出来呀,我会用数组写出来,但是对链表却很陌生,

  • 写回答

2条回答 默认 最新

  • 下坠丷 2022-05-12 02:07
    关注
    
    #include<stdio.h>
    #include<stdlib.h>
    typedef struct Node
    {
        float coef;        //系数
        int exp;        //指数
        struct PNode *next;
    }PNode;
    
    //创建多项式,多项式为空返回false
    void Create(PNode* La);
    //打印多项式
    void Display(const PNode* La);
    //多项式加法
    void Add(PNode* L1, PNode* L2, PNode* ans);
    
    
    int main()
    {
        PNode* La =(PNode* )malloc(sizeof(PNode));
        La->next=NULL;
        PNode* Lb =(PNode* )malloc(sizeof(PNode));
        Lb->next=NULL;
        PNode* ans =(PNode* )malloc(sizeof(PNode));
        ans->next=NULL;
        Create(La);
        Display(La);
        Create(Lb);
        Display(Lb);
        Add(La, Lb, ans);
        Display(ans);
    }
    
    
    void Create(PNode* La)
    {
        PNode* p = La;
        int i = 1;
        while (1)
        {
            int exp;
            float coef;
            //printf("请输入第%d项的系数和指数(0 0结束输入):\n", i);
            scanf("%f %d", &coef, &exp);
            if (coef == 0 && exp == 0)
            {
                break;
            }
            i++;
    
            //根据输入的数据生成结点
            PNode* q=(PNode* )malloc(sizeof(PNode));
            q->coef = coef, q->exp = exp;
            q->next = NULL;
            p->next = q;
            p = p->next;
        }
    }
    
    void Display(const PNode* La)
    {
        La = La->next;
        int key = 0;
        //输出,首个元素不输出+号
        while (La)
        {
            if (key)
            {
                printf("+%fx^%d", La->coef, La->exp);
            }
            else
            {
                printf("%fx^%d", La->coef, La->exp);
                key = 1;
            }
            La = La->next;
        }
        printf("\n");
    }
    
    
    void Add(PNode* L1, PNode* L2, PNode* ans)
    {
    
        L1 = L1->next;
        L2= L2->next;
        PNode* q = ans;
        while (L1&&L2)
        {
            PNode* p=(PNode* )malloc(sizeof(PNode));
            //指数相等,系数相加,否则取小的那个
            if (L1->exp == L2->exp)
            {
                p->coef = L1->coef + L2->coef;
                p->exp = L1->exp;
                L1 = L1->next;
                L2 = L2->next;
            }
            else if (L1->exp < L2->exp)
            {
                p->coef = L1->coef;
                p->exp = L1->exp;
                L1 = L1->next;
            }
            else
            {
                p->coef = L2->coef;
                p->exp = L2->exp;
                L2 = L2->next;
            }
            //系数不为0才存入结果链表
            if (p->coef != 0)
            {
                q->next = p;
                q = q->next;
            }    
        }
        //没有遍历完的链表直接插入尾部
        q->next = L1 ? L1 : L2;
    }
    
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月20日
  • 已采纳回答 5月12日
  • 创建了问题 5月11日

悬赏问题

  • ¥15 写一个可直接调用的函数,将32位有符号数转成另一个无符号的数
  • ¥15 CMAKE+VS2019+QT5.15.2组合进行二次编译
  • ¥15 nginx 配置静态html访问 ,后台登录时页面始终被重定向到登录页,无法访问到后台的静态html页
  • ¥20 自动登录的j2ee程序编译
  • ¥15 fluent模拟静态气体扩散
  • ¥15 java根据模板,生成word文档,需要带目录
  • ¥15 广告联盟的兜底广告是什么意思
  • ¥15 如何证明高斯噪声的包络公式
  • ¥150 寻找王者荣耀开发作者,合作或者解答
  • ¥15 关于cpci总线的几个问题,别用人工智能回答