m0_61800796 2021-10-18 16:15 采纳率: 93.9%
浏览 42
已结题

c语言两个链表的加和乘问题(问题有点长,代码将近100行了))

img


#include <stdio.h>
struct space create();
void print(struct space *p);
struct space mul(struct space *p1,struct space *p2);
struct space add(struct space *p1,struct space *p2);
void attach(int c,int e,struct space *L2);
int main(){
    struct space{
        int xishu;
        int zhishu;
        struct space *next;
    }p1,p2,p3,p4;
    p1 = create();
    p2 = create();
    p3 = mul(p1,p2);
    p4 = add(p1,p2);
    print(p3);
    print(p4);
    return 0;
}
struct space create(){ //创建链表 
    scanf("%d",&n);
    struct space L,front;
    L=(struct space)malloc(sizeof(struct space));
    front=L;
    L=L->next;
    for(i=0;i<n;i++){
    L=(struct space)malloc(sizeof(struct space));
    scanf("%d %d",&L->xishu,&L->zhishu);
    L=L->next;
    }
    L->next=NULL;
    return front;
}
struct space mul(struct space *p1,struct space *p2){ //两个多项式相乘 
    struct space L,frontl,middle;
    L=(struct space)malloc(sizeof(struct space));
    L->next=NULL;
    frontl=L;
    p1=p1->next;
    p2=p2->next;
    middle1=p1;
    for(;middle1;middle1=middle1->next){
        middle2=p2;
        for(;middle2;middle2=middle2->next){
    L=(struct space)malloc(sizeof(struct space));
    L->xishu=(middle1->xishu)+(middle2->xishu);
    L->zhishu=(middle1->zhishu)*(middle2->zhishu);
    L=L->next;
        }
    }
    L->next = NULL;
    return front1;
}
struct space add(struct space *p1,struct space *p2){ //两个多项式相加 
    struct space L2,front2;
    L2=(struct space)malloc(sizeof(struct space));
    L2->next=NULL;
    front2=L2;
    p1=p1->next;
    p2=p2->next;
    while(p1&&p2){
    if(p1->zhishu>p2->zhishu){
        attach(p1->xishu,p1->zhishu,&L2);
        p1=p1->next;
    }else if(p2->zhishu>p2->zhishu){
        attach(p2->xishu,p2->zhishu,&L2);
        p2=p2->next;
    }else{
        if(p2->xishu+p1->xishu){
            ;
        }else{
            attach(p1->xishu+p2->xishu,p1->zhishu,&L2);
            p2=p2->next;
            p1=p1->next;
        }
    }
}
        L2->next=p1?p1:p2;
        return front2;
}
void attach(int c,int e,struct space *L2){ //将系数、指数插到新链表里 
    struct space p;
    p=(struct space)malloc(sizeof(struct space));
    p->xishu=c;
    p->zhishu=e;
    (*L2)->next=p;
    (*L2)=p;
}
void print(struct space *p){ //打印 
    p=p->next;
    while(p){
        printf("%d %d",p->xishu,p->zhishu);
        if(p->next){
        printf(" ");
        }
        p=p->next;
    }
}

img

有大佬能帮我看一下哪里错了吗,一编译全是红的

  • 写回答

1条回答 默认 最新

  • orange4reg 2021-10-18 17:04
    关注

    上面都说得很清楚了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月9日
  • 已采纳回答 11月1日
  • 创建了问题 10月18日

悬赏问题

  • ¥15 在不同的执行界面调用同一个页面
  • ¥20 基于51单片机的数字频率计
  • ¥50 M3T长焦相机如何标定以及正射影像拼接问题
  • ¥15 keepalived的虚拟VIP地址 ping -s 发包测试,只能通过1472字节以下的数据包(相关搜索:静态路由)
  • ¥20 关于#stm32#的问题:STM32串口发送问题,偶校验(even),发送5A 41 FB 20.烧录程序后发现串口助手读到的是5A 41 7B A0
  • ¥15 C++map释放不掉
  • ¥15 Mabatis查询数据
  • ¥15 想知道lingo目标函数中求和公式上标是变量情况如何求解
  • ¥15 关于E22-400T22S的LORA模块的通信问题
  • ¥15 求用二阶有源低通滤波将3khz方波转为正弦波的电路