单链一元多项式相加C++

参考下列实例,改为单链多项式相加


#include <iostream>
using namespace std;
//定义结点类型
struct node
{
    int exp;
    double coef;
    node *next;
};
//多项式循环链表类
class Poly
{
private:
    node *head;
public:
    Poly();
    void in1_Poly();
    void in2_Poly(int,int[],double[]);
    void del_Poly();
    void prt_Poly();
    Poly operator + (Poly &);
    Poly operator * (Poly &);
};
//构造函数,建立空多项式链表
Poly::Poly()
{
    node *p;
    p=new node;
    p->exp=-1;
    p->next=p;
    head=p;
    return;
}
//键盘输人多项式链表
void Poly::in1_Poly()
{
    node *p,*k;
    int e;
    double c;
    k=head;
    cout<<"输入:系数<空格>指数。输人指数-1结束!"<<endl;
    cin>>c>>e;
    while(e>=0)
        {
            p=new node;
            p->exp=e;
            p->coef=c;
            p->next=head;
            k->next=p;
            k=p;
            cin>>c>>e;
        }
            return;
}

//由数组复制多项式链表
void Poly::in2_Poly(int n,int e[],double c[])
{
    int k;
    node *p;
    for(k=n-1;k>=0;k--)
    {
        p=new node;
        p->coef=c[k];
        p->exp=e[k];
        p->next=head->next;
        head->next=p;
    }
    return;
}
//释放多项式链表
void Poly::del_Poly()
{
    node *p,*q;
    q=head->next;
    while(q!=head)
        {
            p=q->next;
            delete q;
             q=p;
        }
        q->next=head;
        return;
}
//输出多项式链表
void Poly::prt_Poly()
{
    node *k;
    if(head->next==head)
        cout<<"空表"<<endl;
    k=head->next;
    while(k!=head)
        {
            cout<<"("<<k->coef<<","<<k->exp<<")"<<endl;
            k=k->next;
        }
    return;
}
//多项式相加
Poly Poly::operator+(Poly &p2)
{
    Poly p;
    node *k,*q,*m,*n;
    int e;
    double c;
    k=p.head;
    m=head->next;
    n=p2.head->next;
    while((m->exp!=-1)||(n->exp!=-1))
    {
        if(m->exp==n->exp)
            {
                c=m->coef+n->coef;
                e=m->exp;
                m=m->next;
                n=n->next;
            }
        else if(m->exp>n->exp)
        {
            c=m->coef;
            e=m->exp;
            m=m->next;
        }
        else
        {
            c=n->coef;
            e=n->exp;
            n=n->next;
        }
        if(c!=0)
        {
            q=new node;
            q->exp=e;
            q->coef=c;
            q->next=p.head;
            k->next=q;
            k=q;
        }
    }
    return(p);
}
//多项式相乘
Poly Poly::operator *(Poly &p2)
{
    Poly p,p1,p3;
    node*q,*k,*m,*n;
    m=head->next;
    while(m->exp!=-1)
        {
            p3=p;
            k=p1.head;
            n=p2.head->next;
            while(n->exp!=-1)
                {
                    q=new node;
                    q->exp=m->exp+n->exp;
                    q->coef=(m->coef)*(n->coef);
                    q->next=p1.head;
                    k->next=q;
                    n=n->next;
                    k=q;
                }
                p=p3+p1;
                p1.del_Poly();
                p3.del_Poly();
                m=m->next;
         }
         return(p);
}







可以参考下这篇文章,希望对你有帮助: