数据结构之线性表应用:一元多项式相加

步骤:创建线性表,并对线性表进行排序,相加后的结果存放在Head1中。

#include <bits/stdc++.h>
using namespace std;

#define MAX 30
typedef struct
{
    float coef;
    int exp;
}PolyArray[MAX];
struct PolyNode
{
    float coef;
    int exp;
    PolyNode *next;
};

void CreatePoly(PolyArray a,int n,PolyNode *Head)//尾插法
{
    PolyNode *s,*r;
    int i;
    r=Head;
    for(i=0;i<n;i++)
    {
        s=new PolyNode;
        s->coef=a[i].coef;
        s->exp=a[i].exp;
        s->next=NULL;
        r->next=s;
        r=s;
    }
}


void PolyAdd(PolyNode *Head1,PolyNode *&Head2)
{
    float sum;
    PolyNode *pa,*pb,*qa,*qb;
    pa=Head1;
    pb=Head2;
    qa=pa->next;
    qb=pb->next;
    while(qa!=NULL&&qb!=NULL)
    {
        if(qa->exp>qb->exp)
        {
            pa=qa;
            qa=qa->next;
        }
        else if(qa->exp<qb->exp)
        {
            pb->next=qb->next;
            qb->next=qa;
            pa->next=qb;
            pa=qb;
            qb=pb->next;
        }
        else
        {
            sum=qa->coef+qb->coef;
            if(sum==0)
            {
                pa->next=qa->next;
                delete qa;
                qa=pa->next;
                pb->next=qb->next;
                delete qb;
                qb=pb->next;
                
            }
            else
            {
                qa->coef=sum;
                pa=qa;
                qa=qa->next;
                pb->next=qb->next;
                delete qb;
                qb=pb->next;
            }
        }
    }
    if(qb!=NULL)
    {
        PolyNode *r=new PolyNode;
        r->coef=qb->coef;
        r->exp=qb->exp;
        pb->next=qb->next;
        delete qb;
        qb=pb->next;
    }
}

void print(PolyNode *Head1)
{
    PolyNode *pa;
    pa=Head1->next;
    while(pa!=NULL)
    {
        cout<<pa->coef<<' '<<pa->exp<<endl;
        pa=pa->next;
    }
}
void PolySort(PolyNode *Head)//降序排列
{
    PolyNode *p,*q,*r;
    p=Head->next;
    if(p!=NULL)
    {
        r=p->next;
        p->next=NULL;
        p=r;
        while(p!=NULL)
        {
            r=p->next;
            q=Head;
            while(q->next!=NULL&&q->next->exp>p->exp)
            {
                q=q->next;
            }
            p->next=q->next;
            q->next=p;
            p=r;
        }
    }
}

int main()
{
    PolyNode *Head1=new PolyNode,*Head2=new PolyNode;//哨兵节点
    PolyArray a={{9,8},{5,16},{3,1},{7,0}};
    PolyArray b={{22,7},{-9,8},{8,1}};
    CreatePoly(a,4,Head1);
    CreatePoly(b,3,Head2);
    PolySort(Head1);
    PolySort(Head2);
    PolyAdd(Head1,Head2);
    print(Head1);
    
    return 0;
    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值