稀疏多项式的加减法计算器——c语言实现(链表)

一元多项式运算器的实现(+.-)

代码如下:

#include<stdio.h>

#include<stdlib.h>

typedef struct 

{

 int a;//多项式系数 

 int n;//多项式指数 

}datalist;

typedef struct list

{

 datalist data;

 struct list *next;

}lnode;

struct list *creat();//创建头结点

struct list *adddata(struct list *head);//数据的输入 

void prt();//显示界面 

void output(struct list *head);//打印链表 

struct list *add(struct list *la,struct list *lb,struct list *lc);//多项式相加 

struct list *sub(struct list *la,struct list *lb,struct list *lc);//多项式相减 

struct list *creat()

{

 struct list *head;

 head=(struct list *)malloc(sizeof(struct list));

 head->next=NULL;

 return head;

}

struct list *adddata(struct list *head)

{

 struct list *l,*p;

 int i,j;

 l=(struct list *)malloc(sizeof(struct list));

 l=head;

 printf("请输入多项式的项数:");

 scanf("%d",&i);

 for(j=1;j<=i;j++){

  p=(struct list *)malloc(sizeof(struct list));

  printf("请输入第%d项的系数和指数",j);

  scanf("%d %d",&p->data.a,&p->data.n);

  p->next=NULL;

  l->next=p;

  l=p;

 }

 return head;

}

void prt()

{

 printf("----------欢迎来到多项式的计算器----------\n");

 printf("---------------1.多项式相加---------------\n");

 printf("---------------2.多项式相减---------------\n");

}

void output(struct list *head)

{

 struct list *f;

 f=(struct list *)malloc(sizeof(struct list));

 f=head->next;

 while(f){

  printf("%dX%d ",f->data.a,f->data.n);

  f=f->next;

 }

}

struct list *add(struct list *la,struct list *lb,struct list *lc)

{

 struct list *pa,*pb,*pc;

 pa=(struct list*)malloc(sizeof(struct list));

 pb=(struct list*)malloc(sizeof(struct list));

 pc=(struct list*)malloc(sizeof(struct list));

 pa=la->next;

 pb=lb->next;

 pc=lc;

 while(pa&&pb){

  if(pa->data.n<pb->data.n){

   pc->next=pa;

   pc=pa;

   pa=pa->next;

  }

  else if(pa->data.n>pb->data.n){

   pc->next=pb;

   pc=pb;

   pb=pb->next;

  }

  else{

   pa->data.a+=pb->data.a;

   pc->next=pa;

   pc=pa;

   pa=pa->next;

   pb=pb->next; 

  }

 }

 pc->next=pa?pa:pb;

 return lc;

}

struct list *sub(struct list *la,struct list *lb,struct list *lc)

{

    struct list *pa,*pb,*pc;

    pa=(struct list*)malloc(sizeof(struct list));
    pb=(struct list*)malloc(sizeof(struct list));
    pc=(struct list*)malloc(sizeof(struct list));
    pa=la->next;
    pb=lb->next;
    pc=lc;
    while(pa&&pb){
        if(pa->data.n<pb->data.n){
            pc->next=pa;
            pc=pa;
            pa=pa->next;
        }
        if(pa->data.n>pb->data.n){
            pc->next=pb;
            pc=pb;
            pb=pb->next;
        }
        if(pa->data.n==pb->data.n){
            if(pa->data.a!=pb->data.a){
                pa->data.a-=pb->data.a;
                pc->next=pa;
                pc=pa;
                pa=pa->next;
                pb=pb->next;
            }
           else{
                pa=pa->next;
                pb=pb->next;
           }
       }
   }
    pc->next=pa?pa:pb;
    return lc;
}
int main()
{
    int g;
    struct list *la,*lb,*lc;
    printf("请输入多项式!\n");
    la=creat();
    la=adddata(la);
    printf("请输入下一个多项式!\n");
    lb=creat();
    lb=adddata(lb);
    lc=creat();
    printf("输入完成!\n");
    prt();
    printf("请输入想要选择的数字:");
    scanf("%d",&g);
    switch(g){
        case 1:
            add(la,lb,lc);
            break;
        case 2:
            sub(la,lb,lc);
            break;
        default:
            printf("输入错误!\n");
            break;
    }
    printf("计算结果为:\n");
    output(lc);
    return 0;
}

运算结果:

c41cf1db753840f59798894f04da9e40.png

9b460dd216bf4afa92e47c71ccc00467.png 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值