#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef float ElemType1;
typedef struct LNode {
ElemType data1;//指数
ElemType1 data2;//系数
struct LNode* next;
} LNode,*Linklist;
bool CreatePolyn(Linklist* m1,int n) {
Linklist s,q;
s=(Linklist)malloc(sizeof(LNode));
*m1=s;
if(s==NULL) {
printf("分配失败!\n");
}
s->next=NULL;
int i;
for(i=0; i<n; i++) {
q=(Linklist)malloc(sizeof(LNode));
q->next=NULL;
scanf("%f%d",&(q->data2),&(q->data1));
s->next=q;
s=q;
}
return true;
}
void print(Linklist p) {
Linklist p1=p->next;
while(p1) {
printf("%f %d\n",p1->data2,p1->data1);
p1=p1->next;
}
printf("\n");
}
void MergePoly(Linklist *Pa,Linklist *Pb)
{
Linklist p1,p2,p3,p,q;
p1 =(*Pa)->next;
p2 =(*Pb)->next;
p3 =(*Pa);
while(p1&&p2)
{
if(p1->data1 == p2->data1)
{
if(p1->data2+p2->data2==0)
{
p = p1;
q = p2;
p1 = p1->next;
p2 = p2->next;
free(q);
free(p);
}
else
{
p1->data2 = p1->data2 + p2->data2;
p3->next = p1;
p3 = p1;
p = p2;
p1 = p1->next;
p2 = p2->next;
free(p);
}
}
else if(p1->data1 < p2->data1)
{
p3->next = p1;
p3 = p1;
p1 = p1->next;
}
else
{
p3->next = p2;
p3 = p2;
p2 = p2->next;
}
}
while(p1)
{
p3->next = p1;
p3 = p1;
p1 = p1->next;
}
while(p2)
{
p3->next = p2;
p3 = p2;
p2 = p2->next;
}
free(*Pb);
}
int main() {
Linklist m1,m2,p;
if(CreatePolyn(&m1,4)){
printf("创建成功了!\n");
print(m1);
}
if(CreatePolyn(&m2,3)){
printf("创建成功了!\n");
print(m2);
}
p=m1;
MergePoly(&m1,&m2);
print(p);
return 0;
}
稀疏多项式的合并
最新推荐文章于 2024-08-08 17:03:13 发布