学习mooc的数据结构记录
思路:从基本的多项式相加,推广到多项式相乘,以及多项式指数排列有序的数据输入要求
#include<stdio.h>
typedef struct arr{
int xishu;
int zhishu;
}xiang;
int print(xiang arr[],int k);
int addmuti(xiang array1[],int num1,xiang array2[],int num2,xiang arradd[]);
int arrcopy(xiang arr1[],int num,xiang arr2[]);
int main()
{
xiang array1[1000]={{0,0}};
xiang array2[1000]={{0,0}};
xiang arraymuti[1000]={{0,0}};
xiang arraymutitep[1000]={{0,0}};
xiang arrayadd[1000]={{0,0}};
xiang array3[1000]={{0,0}};
int i=0,j=0,k=0,m=0,num1=0,num2=0;
scanf("%d",&num1);
for(i=0;i<num1;i++)
{
scanf("%d %d",&array1[i].xishu,&array1[i].zhishu);
}
scanf("%d",&num2);
for(i=0;i<num2;i++)
{
scanf("%d %d",&array2[i].xishu,&array2[i].zhishu);
}
int num3;
num3=addmuti(array1,num1,array2,num2,arrayadd);
k=num2;
for (i=0;i<num1;i++)
{
xiang array3[1000]={{0,0}};
m=0;
for(j=0;j<num2;j++)
{
array3[m].xishu=array1[i].xishu*array2[j].xishu;
array3[m].zhishu=array1[i].zhishu+array2[j].zhishu;
m++;
}
if(i==0)
{
arrcopy(array3,num2,arraymuti);
}
else
{
k=addmuti(arraymuti,k,array3,num2,arraymutitep);
arrcopy(arraymutitep,k,arraymuti);
}
}
print(arraymuti,k);
printf("\n");
print(arrayadd,num3);
}
int addmuti(xiang array1[],int num1,xiang array2[],int num2,xiang arradd[])
{
int i=0,j=0,k=0;
while(i<num1 && j<num2)
{
if(array1[i].zhishu>array2[j].zhishu)
{
arradd[k].zhishu=array1[i].zhishu;
arradd[k].xishu=array1[i].xishu;
i++;
k++;
}
else if(array1[i].zhishu<array2[j].zhishu)
{
arradd[k].zhishu=array2[j].zhishu;
arradd[k].xishu=array2[j].xishu;
j++;
k++;
}
else
{
if((array1[i].xishu+array2[j].xishu)!=0)
{
arradd[k].xishu=array1[i].xishu+array2[j].xishu;
arradd[k].zhishu=array1[i].zhishu;
i++;
j++;
k++;
}
else
{
i++;
j++;
}
}
}
if(i>=num1)
{
while(j<num2)
{
arradd[k].zhishu=array2[j].zhishu;
arradd[k].xishu=array2[j].xishu;
j++;
k++;
}
}
else if(j>=num2)
{
while(i<num1)
{
arradd[k].zhishu=array1[i].zhishu;
arradd[k].xishu=array1[i].xishu;
k++;
i++;
}
}
return k;
}
int print(xiang arr[],int k)
{
int i=0;
printf("%d %d",arr[0].xishu,arr[0].zhishu);
for(i=1;i<k;i++)
{
printf(" %d %d",arr[i].xishu,arr[i].zhishu);
}
return 1;
}
int arrcopy(xiang arr1[],int num,xiang arr2[])
{
int i=0;
for(i=0;i<num;i++)
{
arr2[i].xishu=arr1[i].xishu;
arr2[i].zhishu=arr1[i].zhishu;
}
return 1;
}
利用结构体储存指数和系数的数据,数组代表一个多项式,
注:多项式相乘合并同类项那里,感觉可以用递归。欢迎指出错误。