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日

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能