两个链表的合并
#include<bits/stdc++.h>
using namespace std;
typedef struct Node{
int data;
struct Node* next;
}*List;
List Creat()
{
List L,R,H;
int n,i;
scanf("%d",&n);
H=(List)malloc(sizeof(struct Node));
H->next=NULL;
R=H;
for(i=0;i<n;i++)
{
L=(List)malloc(sizeof(struct Node));
scanf("%d",&L->data);
L->next=R->next;
R->next=L;
R=L;
}
return H;
}
void Print(List L)
{
List p=L->next;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
}
List Merge(List L1,List L2)
{
List p1=L1->next,p2=L2->next,L,r;
L=(List)malloc(sizeof(struct Node));
L->next=NULL;
r=L;
while(p1&&p2)
{
if(p1->data<p2->data)
{
r->next=p1;
r=p1;
p1=p1->next;
}
else
{
r->next=p2;
r=p2;
p2=p2->next;
}
}
if(p1) r->next=p1;
if(p2) r->next=p2;
return L;
}
int main(void)
{
List L1=Creat();
List L2=Creat();
List L=Merge(L1,L2);
Print(L);
return 0;
}
两个多项式的加法
要求:
1、输入:分别给出两个多项式的项数n,m;
第二行:输入n个a,b表示多项式一的系数和指数
第三行:输入m个a,b表示多项式二的系数和指数
2、输出:按指数从小到大输出合并后的多项式。
样例:
输入:
3 4
1 2
2 3
3 4
4 5
5 6
6 7
7 8
输出:
1.00*X^2+2.00*X^3+3.00*X^4+4.00*X^5+5.00*X^6+6.00*X^7+7.00*X^8
实现要点:
1、用链表存储多项式;
2、有序输出,所以建立一个带头节点链表,用尾插法;
3、多项式合并时,可以p1=p2+p1,节省内存;
4、多项式合并时,要分情况考虑(1)指数相同
(2)p1指数大于p2指数(3)p1指数小于p2;
#include<bits/stdc++.h>
using namespace std;
typedef struct PNode{
double coef;
int expn;
struct PNode* next;
}*Polynomial;
Polynomial Creat(int n)
{
Polynomial pre,p,q,s;
p = new struct PNode;
p->next = NULL;
while(n--)
{
s = new struct PNode;
cin >> s->coef >> s->expn;
pre = p;
q = p->next;
while(q && q->expn < s->expn)
{
pre = q;
q = q->next;
}
s->next = q;
pre->next = s;
}
return p;
}
Polynomial Add(Polynomial pa,Polynomial pb)
{
Polynomial p1 = pa->next , p2 = pb->next , p3 = pa , r;
while(p1 && p2)
{
if(p1->expn == p2->expn)
{
int sum = p1->coef + p2->coef;
if(sum == 0)
{
r = p1 ; p1 = p1->next; delete r;
r = p2 ; p2 = p2->next; delete r;
}
else
{
p1->coef = sum;
p3->next = p1;
p3 = p1;
p1 = p1->next;
r = p2; p2 = p2->next ;delete r;
}
}
else if(p1->coef < p2->coef)
{
p3->next = p1;
p3 = p1;
p1 = p1->next;
}
else if(p1->coef > p2->coef)
{
p3->next =p2;
p3 = p2;
p2 = p2->next;
}
}
p3->next = p1 ? p1 : p2;
return pa;
}
void Print(Polynomial p)
{
Polynomial pre = p->next;
printf("%.2f*X^%d" , pre->coef , pre->expn);
for(pre = pre->next; pre ;pre = pre->next)
printf("+%.2f*X^%d" , pre->coef , pre->expn);
printf("\n");
}
int main(void)
{
int n,m;
cin>>n>>m;
Polynomial p1 = Creat(n);
Polynomial p2 = Creat(m);
p1 = Add(p1,p2);
Print(p1);
return 0;
}