注册 登录
编程论坛 数据结构与算法

一元多项式加法运算问题运行无法实现一般情况(即任意输入项式的指数或系数值)输出,如何解决?

美珊 发布于 2013-10-08 09:41, 587 次点击
一元多项式加法运算问题运行无法实现一般情况(即任意输入项式的指数或系数值)输出,如何解决?
各位大神,求帮忙,我在解决一元多项式的过程中,无法实现一般化数据输入。
问题在于:如果我第一个和第二个项式均为F(x)=2x的平方+3x的三次方,那么就一元多项式的加法出错了,可是如果第一个项式为F(x)=2x的平方+3x的三次方,而第二个项式为F(x)=2x的平方+4x的四次方,那么一元多项式的加法就没有错误。
#include <iostream.h>

typedef struct
{
    int xi;//系数
    int zhi;//指数
}ElemType;

typedef struct LNode
{
    ElemType data; //结点的数据部分
    struct LNode *next;
} LinkList;

//初始化链表
void InitList(LinkList *&L)
{
    L=new LinkList;
    L->next=NULL;
}



//插入一个数据结点e到有序链表中
void InsertList(LinkList *&L,ElemType e)
{
    LinkList *r,*s;//r是循环用的结点指针,s是插入的新结点
    r=L;
    //寻找新插入结点的位置
    while(r->next!=NULL&&e.zhi>r->next->data.zhi)
        r=r->next;

    s=new LinkList;
    s->data.xi=e.xi;    s->data.zhi=e.zhi;
    //将e的值赋给s指针所指结点
    s->next=r->next;
    r->next=s;
}

//两个多项式相加
void AddList(LinkList *&L,LinkList *Lc)
{
    LinkList *r,*s;   
    ElemType p;
    r=L;
    s=Lc;

    if(r->next!=NULL && s->next!=NULL)
    {   
        while(s->next->data.zhi==r->next->data.zhi)
        {
            r->next->data.xi=s->next->data.xi+r->next->data.xi;
            s=s->next;
        }
   
        p.xi=s->next->data.xi;   
        p.zhi=s->next->data.zhi;
        InsertList(L,p);
        r=r->next;
    }

}


//遍历线性表
void DispList(LinkList *L)
{
    LinkList *p=L->next;
    cout<<"F(X)=";
    while(p)
    {
        cout<<p->data.xi<<"X^"<<p->data.zhi;
        if(p->next!=NULL&&p->next->data.xi>0)
            cout<<"+";
        p=p->next;   
    }
    cout<<endl;
}



//主程序部分
void main()
{
    LinkList *La,*Lc;
    InitList(La);
    InitList(Lc);
    int i=0;ElemType k,f;

    cout<<"输入第一个一元多项式:"<<endl;
    do
    {        
        cout<<"请输入第"<<i+1<<"项的系数:";
        cin>>k.xi;
        cout<<"请输入第"<<i+1<<"项的指数:";
        cin>>k.zhi;
        i++;
        cout<<endl;
        if(k.xi!=0 && k.zhi!=0)
            InsertList(La,k);
    }while(k.xi!=0 && k.zhi!=0);

    cout<<"输入第二个一元多项式:"<<endl;
    i=0;
    do
    {   
        cout<<"请输入第"<<i+1<<"项的系数:";
        cin>>f.xi;
        cout<<"请输入第"<<i+1<<"项的指数:";
        cin>>f.zhi;
        i++;
        cout<<endl;
        if(f.xi!=0 && f.zhi!=0)
            InsertList(Lc,f);
    }while(f.xi!=0 && f.zhi!=0);

    AddList(La,Lc);
    DispList(La);


}
0 回复
1