题目介绍
- 工作指针p、q初始化;
- while(p存在且q存在)执行下列三种情形之一
2.1 如果p->expexp,则指针p后移;
2.2 如果p->exp>q->exp,则
2.2.1 将结点q插入到结点p之前;
2.2.2 指针q指向原指结点的下一个结点;
2.3 如果p->exp=q->exp,则
2.3.1 p->coef =p->coef+q->coef;
2.3.2 如果p->coef ==0,则执行下列操作,否则,指针p后移;
2.3.2.1 删除结点p;
2.3.2.2 使指针p指向它原指结点的下一个结点;
2.3.3 删除结点q;
2.3.4 使指针q指向它原指结点的下一个结点;
3. 如果q不为空,将结点q链接在第一个单链表的后面;
#include<iostream>
#include<cstdlib>
using namespace std;
typedef struct Po
{
int coef;
int exp;
struct Po *next;
}poly;
void Create(poly *&L,int n)
{
poly *s;
int a,b;
L=(poly *)malloc(sizeof(poly));
L->next=NULL;
for(int i=0;i<n;i++)
{
s=(poly *)malloc(sizeof(poly));
cout<<"输入第"<<i+1<<"个系数";
cin>>a;
s->coef=a;
cout<<"输入第"<<i+1<<"个指数";
cin>>b;
s->exp=b;
s->next=L->next;
L->next=s;
}
}
bool Insert(poly *&L,int i,poly *K)
{
poly *p=L,*s;
if(i<0)
return false;
for(int j=0;j<i&&p->next!=NULL;j++)
{
p=p->next;
}
if(p==NULL)
{
return false;
}
else
{
s=(poly *)malloc(sizeof(poly));
s->coef=K->next->coef;
s->exp=K->next->exp;
s->next=p->next;
p->next=s;
return true;
}
}
bool Dele(poly *&L,int i)
{
poly *p=L,*s;
if(i<0)
return false;
for(int j=0;j<i&&p->next!=NULL;j++)
{
p=p->next;
}
if(p==NULL)
{
return false;
}
else
{
s=p->next;
p->next=s->next;
free(s);
return true;
}
}
int main()
{
int m,n,k=0;
poly *p,*q;
cout<<"第一个的项数"<<endl;
cin>>m;
Create(p,m);
cout<<"第二个的项数"<<endl;
cin>>n;
Create(q,n);
poly *p1=p,*q1=q;
while(p1->next!=NULL&&q1->next!=NULL)
{
if(p1->next->exp>q1->next->exp)
{
p1=p1->next;
k++;
}
else if(p1->next->exp<q1->next->exp)
{
Insert(p,k,q1);
q1=q1->next;
}
else if(p1->next->exp==q1->next->exp)
{
p1->next->coef=p1->next->coef+q1->next->coef;
if(p1->next->coef==0)
{
Dele(p,k);
q1=q1->next;
}
else
{
p1=p1->next;
q1=q1->next;
k++;
}
}
}
if(q1->next!=NULL)
{
p1->next=q1->next;
}
while(p->next!=NULL)
{
if(p->next->next==NULL)
cout<<p->next->coef<<"*x^"<<p->next->exp<<endl;
else
cout<<p->next->coef<<"*x^"<<p->next->exp<<"+";
p=p->next;
}
}