1. 程式人生 > >資料結構實驗:線性表操作(一元多項式的運算)

資料結構實驗:線性表操作(一元多項式的運算)

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;
}
​
​