这是一个用C语言实现的链表完成多项式运算的程序。
问题描述:
设计函数分别求两个一元多项式的和
(1)3x4 - 5x2 + 6x - 2 ;
(2)5x20 - 7x4 + 3x ;
输入样例:
4 3 4 -5 2 6 1 -2 0
3 5 20 -7 4 3 1
输出样例:
5 20 -4 4 -5 2 9 1 -2 0
代码(函数声明放在头文件不再展示):
#include<stdio.h>
#include<stdlib.h>
#include"polynomial.h"
void Attach(int c,int e,Polynomial *pRear);
int main(void)
{
Polynomial P1,P2,PS;
P1=ReadPoly();
P2=ReadPoly();
/*PP=MultPoly(P1,P2);
PrintPoly(PP);*/
PS=AddPoly(P1,P2);
PrintPoly(PS);
return 0;
}
Polynomial ReadPoly(void)
{
Polynomial P,Rear,t;
int N,c,e;
scanf("%d",&N);
P=(Polynomial)malloc(sizeof(struct PolyNode));
P->Link=NULL;
Rear=P;
while(N--)
{
scanf("%d%d",&c,&e);
Attach(c,e,&Rear);
}
t=P;
P=P->Link;
free(t);
return P;
}
void Attach(int c,int e,Polynomial *pRear)
{
Polynomial Q;
Q=(Polynomial)malloc(sizeof(struct PolyNode));
Q->coef=c;
Q->expon=e;
Q->Link=NULL;
(*pRear)->Link=Q;
*pRear=Q;
}
Polynomial AddPoly(Polynomial P1,Polynomial P2)
{
Polynomial t1,t2,P;
Polynomial Rear;
t1=P1;
t2=P2;
P=(Polynomial)malloc(sizeof(struct PolyNode));
P->Link=NULL;
Rear=P;
while(t1 && t2)
{
if(t1->expon == t2->expon)
{
Attach(t1->coef+t2->coef,t1->expon,&Rear);
t1=t1->Link;
t2=t2->Link;
continue;
}
if(t1->expon > t2->expon)
{
Attach(t1->coef,t1->expon,&Rear);
t1=t1->Link;
continue;
}
else
{
Attach(t2->coef,t2->expon,&Rear);
t2=t2->Link;
continue;
}
}
while(t1)
{
Attach(t1->coef,t1->expon,&Rear);
t1=t1->Link;
}
while(t2)
{
Attach(t2->coef,t2->expon,&Rear);
t2=t2->Link;
}
return P;
}
/*Polynomial MultPoly(Polynomial P1,Polynomial P2)
{
}*/
void PrintPoly(Polynomial P)
{
int flag;
if(!P)
{
printf("0 0\n");
return;
}
while(P)
{
if(!flag)
flag=1;
else
printf(" ");
printf("%d %d ",P->coef,P->expon);
P=P->Link;
}
}
输出:
(想知道为什么输出前会有一个疑似地址的东西)