题目是这样的: 应用单链表实现一元多项式及其相加。 例如,一元多项式 1:x2+5x+3;一元多项式 2:2x2+5;加法运算结果:3x2+5x+8。
代码:
#include using namespace std;struct node{ int xishu; //系数 int zhishu; //指数 node* next;};void creatnode(node * phead) //创建链表{ cout<<"前一个数表示系数,后一个数表示指数。输入两个 0 表示结束输入"<>x; cin>>y; pnode->xishu=x; pnode->zhishu=y; pnode->next=nullptr; p->next=pnode; p=pnode; } if(x==0) { cout<<"输入完毕!"<next; node q=p; bool flag; flag=true; while(flag) //冒泡排序 { flag=false; p=phead->next; while((p->next)!=nullptr) { if((p->zhishu)<(p->next->zhishu)) { int temp,temp2; temp=p->xishu; temp2=p->zhishu; p->xishu=p->next->xishu; p->zhishu=p->next->zhishu; p->next->xishu=temp; p->next->zhishu=temp2; p=p->next; flag=true; } p=p->next; } }}void print(node*phead1,node * phead2,node * phead3) //输出两多项式相加后的多项式{ node *p=phead1; p=phead1->next; node * q=phead2; q=phead2->next; node store=phead3; while((p->next!=nullptr)&&(q->next!=nullptr)) //不考虑链表中最后的0,所以不考虑最后的结点 { node * temp=new node; if(p->zhishu==q->zhishu) { temp->xishu=p->xishu+q->xishu; temp->zhishu=p->zhishu; temp->next=nullptr; store->next=temp; store=temp; p=p->next; q=q->next; } if((p->zhishu)>(q->zhishu)) { temp->xishu=p->xishu; temp->zhishu=p->zhishu; temp->next=nullptr; store->next=temp; store=temp; p=p->next; } if((p->zhishu)<(q->zhishu)) { temp->xishu=q->xishu; temp->zhishu=q->zhishu; temp->next=nullptr; store->next=temp; store=temp; q=q->next; p=p; } } //接下来处理当两个链表中某个链表全部遍历之后,将令一个链表中的值赋给目标链表 while(p->next!=nullptr&&q->next==nullptr) { node * temp=new node; temp->xishu=p->xishu; temp->zhishu=p->zhishu; temp->next=nullptr; store->next=temp; store=temp; p=p->next; q=q; } while(q->next!=nullptr&&p->next==nullptr) { node * temp=new node; temp->xishu=q->xishu; temp->zhishu=q->zhishu; temp->next=nullptr; store->next=temp; store=temp; q=q->next; } //输出最终结果 cout<<"输出之前的遍历:"; travel(phead3); node * r=phead3; r=phead3->next; while(r->next!=nullptr) { if(r->zhishu!=0) { cout<xishu<<"x^"<zhishu<<"+"; } if(r->zhishu==0) { cout<xishu<<"+"; } r=r->next; } if(r->zhishu!=0) { cout<xishu<<"x^"<zhishu<<"."; } if(r->zhishu==0) { cout<xishu<<"."; }}int main(){ node* head1=new node; head1->next=nullptr; cout<<"请输入第一个一元多项式,"; creatnode(head1); node* head2=new node; head2->next=nullptr; cout<<"请输入第二个一元多项式,"; creatnode(head2); node * head3=new node; //创建目标链表的哨位结点 head3->next=nullptr; lsort(head1); lsort(head2); print(head1,head2,head3); return 0;}
当输入题目中的样例时,输出的只有5x^1+8. 少了3x^2这一项。