数据结构实验:线性表操作(一元多项式的运算)

title: 线性表操作(一元多项式的运算)
date: 2018-10-26 11:22:37
tags: 数据结构
categories: 数据结构

线性表操作(一元多项式的运算)

实验目的

1、定义线性表的链式存储

2、实现对线性表的一些基本操作和具体函数定义

实验要求

1、定义线性表的链式存储;

2、实现对线性表的一些基本操作和具体函数定义。

3、定义输出一元多项式的函数;

4、编写主程序调用上面的函数实现一元多项式的加减。

数据输入输出要求

输入示例

3

2 3

3 4

5 7

5

2 1

3 3

-3 4

4 6

5 7

(说明:第一个数据3表示该第一个一元多项式的项数为3,后面的2 3 表示第一项的系数为2 指数为3;按指数递增的次序输入)

输出示例

一元多项式1: 2x(3)+3x(4)+5x(7)

一元多项式2: 2x(1)+3x(3)-3x(4)+4x(6)+5x(7)

加的结果:2x(1)+5x(3) +4x(6)+10x(7)

减的结果:-2x(1)-1x(3)+6x(4)-4x(6)

 

代码

#include<bits/stdc++.h>
​
typedef struct polynode
{
    float coef;  //系数
    int expn;    //指数
    struct polynode *next;
}polynode,*polylist;
​
int s=1;
void poly_create(polylist &L) //多项式链表创建
{
    int m;
    printf("请输入第 %d 个一元多项式项数:",s);
    scanf("%d",&m);
    L=(polylist)malloc(sizeof(polynode)); //申请头节点指针
    polylist p;
    p=L;
    for(int i=1;i<=m;i++)
    {
        p->next=(polylist)malloc(sizeof(polynode)); //不断申请
        p=p->next;
        printf("请输入第 %d 项的系数:",i);
        scanf("%f",&p->coef);
        printf("请输入第 %d 项的指数:",i);
        scanf("%d",&p->expn);
    }
    p->next=NULL;
}
​
void display(polylist L) //打印多项式
{
    polylist p;
    p=L->next;
    printf("%.0fx(%d)",p->coef,p->expn);
    p=p->next;
    while(p!=NULL)
    {
        if(p->coef>0)
        {
            printf("+%.0fx(%d)",p->coef,p->expn);
        }
        else
        {
            printf("%.0fx(%d)",p->coef,p->expn);
        }
        p=p->next;
    }
    printf("\n");
}
​
void add(polylist La, polylist Lb, polylist &Lc)
{
    polylist pa,pb,pc;
    pc=(polylist)malloc(sizeof(polynode));
    Lc=pc;
    pa=La->next;
    pb=Lb->next;
    float x;
    while (pa&&pb)
    {
        //int EXPN;
        if(pa->expn==pb->expn) //指数相同
        {
            //EXPN=pa->expn;
            x=pa->coef+pb->coef;
            if(x)
            {
                pc->next=(polylist)malloc(sizeof(polynode));
                pc=pc->next;
                pc->coef=x;
                pc->expn=pa->expn;
            }
                pa=pa->next;
                pb=pb->next;
        }
        else
        {
            pc->next=(polylist)malloc(sizeof(polynode));
            pc=pc->next;
            if(pa->expn<pb->expn)
            {
                pc->coef=pa->coef;
                pc->expn=pa->expn;
                pa=pa->next;
            }
            else
            {
                pc->coef=pb->coef;
                pc->expn=pb->expn;
                pb=pb->next;
            }
        }
    }
    while(pa)
    {
        pc->next=(polylist)malloc(sizeof(polynode));
        pc=pc->next;
        pc->coef=pa->coef;
        pc->expn=pa->expn;
        pa=pa->next;
    }
    while(pb)
    {
        pc->next=(polylist)malloc(sizeof(polynode));
        pc=pc->next;
        pc->coef=pb->coef;
        pc->expn=pb->expn;
        pb=pb->next;
    }
    pc->next=NULL;
}
​
void subtract(polylist La,polylist Lb,polylist &Lc)
{
    polylist pa,pb,pc;
    pc=(polylist)malloc(sizeof(polynode));
    Lc=pc;
    pa=La->next;
    pb=Lb->next;
    float x;
    while (pa&&pb)
    {
        //int EXPN;
        if(pa->expn==pb->expn) //指数相同
        {
            //EXPN=pa->expn;
            x=pa->coef-pb->coef;
            if(x)
            {
                pc->next=(polylist)malloc(sizeof(polynode));
                pc=pc->next;
                pc->coef=x;
                pc->expn=pa->expn;
            }
                pa=pa->next;
                pb=pb->next;
        }
        else
        {
            pc->next=(polylist)malloc(sizeof(polynode));
            pc=pc->next;
            if(pa->expn<pb->expn)
            {
                pc->coef=pa->coef;
                pc->expn=pa->expn;
                pa=pa->next;
            }
            else
            {
                pc->coef=pb->coef;
                pc->expn=pb->expn;
                pb=pb->next;
            }
        }
    }
    while(pa)
    {
        pc->next=(polylist)malloc(sizeof(polynode));
        pc=pc->next;
        pc->coef=-pa->coef;
        pc->expn=pa->expn;
        pa=pa->next;
    }
    while(pb)
    {
        pc->next=(polylist)malloc(sizeof(polynode));
        pc=pc->next;
        pc->coef=-pb->coef;
        pc->expn=pb->expn;
        pb=pb->next;
    }
    pc->next=NULL;
}
​
int main()
{
    polylist La,Lb,Lc,Ld;
    poly_create(La);
    s++;
    poly_create(Lb);
    printf("一元多项式1:");
    display(La);
    printf("一元多项式2:");
    display(Lb);
    add(La,Lb,Lc);
    printf("加的结果:");
    display(Lc);
    subtract(La,Lb,Ld);
    printf("减的结果: ");
    display(Ld);
    return 0;
}
​
​
  • 10
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值