(链表实现)写出两个一元多项式相加的算法

来源:互联网 发布:没有网络连接 编辑:程序博客网 时间:2024/05/01 21:25
/*实验23. 试写出两个一元多项式相加的算法。用链表来存储一元多项式,并且要在程序中验证其功能实现。此题的源程序保存为2_e1.cpp*/#include<iostream>using namespace std;struct node{int co;    //系数int exp;   //指数struct node * next;};node* Creat() {//尾插法建表,有头结点node* head; node* s, *p; int c, e;head=new node; //生成头结点head->next=NULL;cout<<"请分别输入新的一项的系数、指数(以输入9999作为结束):"<<endl;cin>>c>>e;while(c!=9999 && e!=9999) //输入并检测结束{s=new node;//生成新结点s->co = c;//装入数据s->exp = e;p=head;while(p->next!=NULL){p=p->next;} p->next = s;  //插到最后一个结点后s->next = NULL;  cout<<"请分别输入新的一项的系数、指数(以输入9999作为结束):"<<endl;cin>>c>>e;}return  head;}void Display(node * head){if(head==NULL){cout<<"多项式不存在!"<<endl;return ;}node* p;p=head->next;while(p!=NULL){if(p->co>0)cout<<p->co<<"x^"<<p->exp;elsecout<<"("<<p->co<<")"<<"x^"<<p->exp;if(p->next!=NULL)cout<<"+";p=p->next;}cout<<endl<<endl;}node* Add(node * A, node * B){node * C=new node;C->next=NULL;node * p1=A->next;node * p2=B->next;node * p3;node * rearC=C;while(p1!=NULL && p2!=NULL){if(p1->exp < p2->exp){p3=new node;p3->co=p1->co;p3->exp=p1->exp;p3->next=NULL;rearC->next=p3;rearC=p3;p1=p1->next;}else if (p1->exp > p2->exp){p3=new node;p3->co=p2->co;p3->exp=p2->exp;p3->next=NULL;rearC->next=p3;rearC=p3;p2=p2->next;}else //p1->exp == p2->exp{if((p1->co + p2->co) != 0){p3=new node;p3->co = p1->co + p2->co;p3->exp= p1->exp;p3->next=NULL;rearC->next=p3;rearC=p3;}p1=p1->next;p2=p2->next;}}if(p1==NULL){while(p2!=NULL){p3=new node;p3->co=p2->co;p3->exp=p2->exp;p3->next=NULL;rearC->next=p3;rearC=p3;p2=p2->next;}}else //p2==NULL{while(p1!=NULL){p3=new node;p3->co=p1->co;p3->exp=p1->exp;p3->next=NULL;rearC->next=p3;rearC=p3;p1=p1->next;}}return C;}int main(){cout<<"多项式A:"<<endl;node * PL1;PL1=Creat();cout<<"多项式A=";Display(PL1);cout<<"多项式B:"<<endl;node * PL2;PL2=Creat();cout<<"多项式A=";Display(PL2);cout<<"多项式A+B=";node * PL3;PL3=Add(PL1,PL2);Display(PL3);return 0;}