实验1 线性表操作(一元多项式运算)

实验1  线性表操作(一元多项式运算)

一、实验目的

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 <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef  struct  polynode
 {   float    coef;      //系数
     int     expn;      //指数
     struct  polynode  *next;
  } polynode,*polylist;

void poly_create(polylist &L);   //创建链表
void poly_display(polylist L);   //显示链表内容
void poly_add(polylist La, polylist Lb, polylist &Lc);       //多项式相加 
void poly_subtract(polylist La, polylist Lb, polylist &Lc);    //多项式相减

int main()
{  
polylist La,Lb,Lc,Ld;
poly_create(La);
poly_display(La)
poly_create(Lb);
poly_display(Lb);
poly_add(La, Lb, Lc);
poly_ display(Lc); 
poly_subtract(La, Lb, Ld);
poly_display(Ld);
}
//补齐下面代码
void poly_create(polylist& L)
{
    int i;
    scanf_s("%d", &i);
    L = (polylist)malloc(sizeof(polynode)); 
    polylist p;
    p = L;
    for (int j = 1; j <= i; j++)
    {
        p->next = (polylist)malloc(sizeof(polynode)); 
        p = p->next;
        scanf_s("%f", &p->coef);
        scanf_s("%d", &p->expn);
    }
    p->next = NULL;
}

void poly_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 poly_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)
    {
        if (pa->expn == pb->expn) 
        {
            x = pa->coef + pb->coef;
            if (x!=0)
            {
                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 poly_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)
    {
        if (pa->expn == pb->expn) 
        {
            x = pa->coef - pb->coef;
            if (x!=0)
            {
                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;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值