您的位置:首页 > 其它

一元多项式的加法与乘法

2018-03-14 20:30 323 查看
我只写了加法......乘法以后有空补上(可能补不上了>_<)
#include <stdio.h>
#include <stdlib.h>
typedef struct Node* Polynode;
struct Node
{
int c;
int e;
Polynode Link;
};

Polynode Read();
void Attach(int c,int e,Polynode *rear);
void Print(Polynode p);
Polynode Add(Polynode p1,Polynode p2);
//Polynode Mult(Polynode p1,Polynode p2);

int main()
{
Polynode p1,p2,p3;
p1=Read();
p2=Read();
p3=Add(p1,p2);
//p4=Mult(p1,p2);
Print(p3);
//Print(p4);
return 0;
}

Polynode Read()
{
int n,c,e;
scanf("%d",&n);
Polynode P=(Polynode)malloc(sizeof(struct Node));
Polynode rear=P;
while(n--){
scanf("%d %d",&c,&e);
Attach(c,e,&rear);
}
rear->Link=NULL;
Polynode t=P;
P=P->Link;
free(t);
return P;
}

void Attach(int c,int e,Polynode *rear)
{
Polynode p=(Polynode)malloc(sizeof(struct Node));
p->c=c;
p->e=e;
(*rear)->Link=p;
*rear=p;
}

Polynode Add(Polynode p1,Polynode p2)
{
Polynode p3=p1;
Polynode p4=p2;
Polynode L=(Polynode)malloc(sizeof(struct Node));
L->Link=NULL;
Polynode rear=L;
while(p3&&p4){
if(p3->e>p4->e){
rear->Link=p3;
rear=p3;
p3=p3->Link;
}
else if(p3->e==p4->e){
if(p3->c+p4->c){
p3->c+=p4->c;
rear->Link=p3;
rear=p3;
}
p3=p3->Link;
p4=p4->Link;
}
else{
rear->Link=p4;
rear=p4;
p4=p4->Link;
}
}
if(p3)
rear->Link=p3;
if(p4)
rear->Link=p4;
Polynode t=L;
L=L->Link;
free(t);
return L;
}

void Print(Polynode p)
{
Polynode p1=p;
while(p1){
printf("%d %d ",p1->c,p1->e);
p1=p1->Link;
}
printf("\n");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: