数据结构 P42-43 算法实现 多项式的建立及加法

来源:互联网 发布:淘宝客活动报名审核 编辑:程序博客网 时间:2024/05/16 11:11

/*多项式的建立及加法*/

#include<iostream>

using namespace std;

struct node
{
int coefficient;                      //系数
int exponent; //指数
    node *next;
};

class polynomial                      //多项式
{
public:
int value;                             //value记录多项式的值
node  *head,*p,*s;               
public:
polynomial(){head=NULL;} //构造函数
void InitPoly();                    //建立多项式
    void output();                     //打印多项式
int  count(int x);                 //计算多项式
};

void polynomial::InitPoly()   //建立多项式
{       
     int x,y;                        //x记录该项的系数,y记录该项的指数
     p=head;
   while(1)
       {
s=new node();      //动态分配新的节点记录 项
           cout<<"coefficient: ";   
       cin>>x;
if(x==0)break;       //当输入系数为0时退出多项式创建函数
s->coefficient=x;  
cout<<"exponent: ";
cin>>y;
       s->exponent=y;
if(head==NULL)
p=head=s;
else
{ p->next=s;
 p=p->next;}  
 }
cout<<endl;
}

void polynomial::output()     

cout<<"多项式为:";
for(p=head;p!=NULL;p=p->next)
if(p->coefficient!=0)         //该项系数为0则不打印该项
{cout<<p->coefficient<<"*x^"<<p->exponent<<" ";}
cout<<endl;
}

int polynomial::count(int x)
{
 int v=1;
 value=0;
 for (p=head;p!=NULL;p=p->next)
 {
 for(int j=0;j<p->exponent;++j)
              v*=x;
 value+=p->coefficient*v;   //将每项的值累加起来
 v=1;
 }
 return value;                         //返回该多项式的值
}

void AddPol(polynomial A,polynomial B);

int main( )
{
int x,v;          
node *p;
polynomial A,B;
A.InitPoly();
A.output();

B.InitPoly();
    B.output();

AddPol(A,B);
A.output();
cout<<"x=";
cin>>x;
v=A.count(x);
cout<<v<<endl;

while (1){}
return 0;
}

void AddPol(polynomial A,polynomial B)   //多项式加法:A=A+B,利用两个多项式的节点构成“和多项式”。
{   
node *pa,*pb,*temp;
pa=new node();
pb=new node();
pa->next=A.head;                
pb->next=B.head;

while(pa->next&&pb->next)              //当pa和pb指向的下一个节点不为空时
{
if(pa->next->exponent<pb->next->exponent)//若pa指向的下一个节点的指数小于和pb指向的下一个节点的指数
pa=pa->next;                                                //pa后移一位
else if(pa->next->exponent>pb->next->exponent)//若pa指向的下一个节点的指数大于和pb指向的下一个节点的指数
{
temp=new node();                                              //动态分配一个临时节点
temp->coefficient=pb->next->coefficient;        //将pb的下一个节点中的系数和指数赋给临时节点
temp->exponent=pb->next->exponent;
   temp->next=pa->next;                                     //将临时节点插入pa和pa的下一个节点之间 
pa->next=temp;
pa=pa->next;
pb=pb->next;
}
else         //若pa指向的下一个节点的指数等于和pb指向的下一个节点的指数
{
pa->next->coefficient+=pb->next->coefficient; //把pa和pb下一个节点的系数相加
pa=pa->next;
pb=pb->next;
}
}
while(pb->next) //若pb的下一个节点还不为空,将B剩下的项链接在A的后面
{
pa->next=pb; 
pa=pa->next;
pb=pb->next;
}

}

————————————————————————————————————————————————————

/*算法2.22*/

void polynomial::InitPoly()    //建立多项式
{       
      int x,y;                        //x记录该项的系数,y记录该项的指数
      p=head;
    while(1)
        {
s=new node();      //动态分配新的节点记录 项
            cout<<"coefficient: ";   
        cin>>x;
 if(x==0)break;       //当输入系数为0时退出多项式创建函数
s->coefficient=x;  
cout<<"exponent: ";
cin>>y;
        s->exponent=y;
if(head==NULL)
p=head=s;
else
{ p->next=s;
  p=p->next;}   
  }
cout<<endl;
}

/*算法2.23*/

void AddPol(polynomial A,polynomial B)   //多项式加法:A=A+B,利用两个多项式的节点构成“和多项式”。
{   
node *pa,*pb,*temp;
pa=new node();
pb=new node();
pa->next=A.head;                
pb->next=B.head;

while(pa->next&&pb->next)              //当pa和pb指向的下一个节点不为空时
{
if(pa->next->exponent<pb->next->exponent)//若pa指向的下一个节点的指数小于和pb指向的下一个节点的指数
pa=pa->next;                                                //pa后移一位
else if(pa->next->exponent>pb->next->exponent)//若pa指向的下一个节点的指数大于和pb指向的下一个节点的指数
{
temp=new node();                                              //动态分配一个临时节点
temp->coefficient=pb->next->coefficient;        //将pb的下一个节点中的系数和指数赋给临时节点
temp->exponent=pb->next->exponent;
    temp->next=pa->next;                                     //将临时节点插入pa和pa的下一个节点之间 
pa->next=temp;
pa=pa->next;
pb=pb->next;
}
else         //若pa指向的下一个节点的指数等于和pb指向的下一个节点的指数
{
pa->next->coefficient+=pb->next->coefficient; //把pa和pb下一个节点的系数相加
pa=pa->next;
pb=pb->next;
}
}
while(pb->next) //若pb的下一个节点还不为空,将B剩下的项链接在A的后面
{
pa->next=pb; 
pa=pa->next;
pb=pb->next;
}

}


阅读全文
1 0