您的位置:首页 > 其它

多项式相加

2015-06-05 23:04 267 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_21585773/article/details/46382953

多项式相加

刚学到数据结构 ,看了一下书 ,自己写了一个多项式相加的程序。。~~~~

首先定义相关的数据类型

typedef struct
{
int		coef;//系数
int		expon;
}Number;

typedef struct PolyNode{
Number		data;
PolyNode	*link;
}PolyNode;

typedef struct HeadNode{
PolyNode	*first;
}HeadNode;
typedef HeadNode List;


主要函数就是两个链表的相加

void PolyNodeAdd(List *L1 ,List *L2 ,List *L3)
{
PolyNode	*p1 ,*p2 ,*newp3;
p1 = L1->first;
p2 = L2->first;
while(p1 && p2)
{
newp3 = new PolyNode;
newp3->link = NULL;
if(p1->data.expon == p2->data.expon)
{
newp3->data.expon = p1->data.expon;
newp3->data.coef = p1->data.coef + p2->data.coef;
if(newp3->data.coef != 0)
Insert(L3 ,newp3);
p1 = p1->link;
p2 = p2->link;
}
else if(p1->data.expon > p2->data.expon)
{
newp3->data.expon = p1->data.expon;
newp3->data.coef = p1->data.coef;
Insert(L3 ,newp3);
p1 = p1->link;
}
else
{
newp3->data.expon = p2->data.expon;
newp3->data.coef = p2->data.coef;
Insert(L3 ,newp3);
p2 = p2->link;
}
}

for(;p1;p1 = p1->link)
{
newp3 = new PolyNode;
newp3->link = NULL;
newp3->data.expon = p1->data.expon;
newp3->data.coef = p1->data.coef;
Insert(L3 ,newp3);
}
for(;p2;p2 = p2->link)
{
newp3 = new PolyNode;
newp3->link = NULL;
newp3->data.expon = p2->data.expon;
newp3->data.coef = p2->data.coef;
Insert(L3 ,newp3);
}

}


完整的源代码:

# include <stdio.h>
# include <stdlib.h>

typedef struct
{
int		coef;//系数
int		expon;
}Number;

typedef struct PolyNode{
Number		data;
PolyNode	*link;
}PolyNode;

typedef struct HeadNode{
PolyNode	*first;
}HeadNode;
typedef HeadNode List;
List	*L1 ,*L2 ,*L3;

List	*Creat(List	*L)
{
L = new List;
if(!L)
return NULL;
L->first = NULL;
return L;
}

bool Insert(List *L ,PolyNode *p)
{
PolyNode	*current;
current = L->first;
if(!current)
{
L->first = p;
p->link = NULL;
}
else
{
while(current->link)
current = current->link;
current->link = p;
p->link = NULL;
}
return true;
}

void Input(List	*L)
{
int flag = 1;
PolyNode *p;

while(flag)
{
p = new PolyNode;
p->link = NULL;
printf("请输入该项的系数:");
scanf("%d" ,&p->data.coef);
printf("请输入该项的指数:");
scanf("%d" ,&p->data.expon);
fflush(stdin);
Insert(L ,p);
printf("是否继续?\n");
scanf("%d" ,&flag);
fflush(stdin);
}
}

void Output(List	*L)
{
if(!L->first)
return ;
PolyNode *current;
current = L->first;
while(current){
printf("%dX%d" ,current->data.coef ,current->data.expon);
if(current->link)
printf(" + ");
current = current->link;
}
printf("\n");
}

void PolyNodeAdd(List *L1 ,List *L2 ,List *L3)
{
PolyNode	*p1 ,*p2 ,*newp3;
p1 = L1->first;
p2 = L2->first;
while(p1 && p2)
{
newp3 = new PolyNode;
newp3->link = NULL;
if(p1->data.expon == p2->data.expon)
{
newp3->data.expon = p1->data.expon;
newp3->data.coef = p1->data.coef + p2->data.coef;
if(newp3->data.coef != 0)
Insert(L3 ,newp3);
p1 = p1->link;
p2 = p2->link;
}
else if(p1->data.expon > p2->data.expon)
{
newp3->data.expon = p1->data.expon;
newp3->data.coef = p1->data.coef;
Insert(L3 ,newp3);
p1 = p1->link;
}
else
{
newp3->data.expon = p2->data.expon;
newp3->data.coef = p2->data.coef;
Insert(L3 ,newp3);
p2 = p2->link;
}
}

for(;p1;p1 = p1->link)
{
newp3 = new PolyNode;
newp3->link = NULL;
newp3->data.expon = p1->data.expon;
newp3->data.coef = p1->data.coef;
Insert(L3 ,newp3);
}
for(;p2;p2 = p2->link)
{
newp3 = new PolyNode;
newp3->link = NULL;
newp3->data.expon = p2->data.expon;
newp3->data.coef = p2->data.coef;
Insert(L3 ,newp3);
}

}

int main()
{

L1 = Creat(L1);
L2 = Creat(L2);
L3 = Creat(L3);

Input(L1);
system("cls");
Input(L2);

Output(L1);
Output(L2);
system("pause");
system("cls");

PolyNodeAdd(L1 ,L2 ,L3);

Output(L3);
system("pause");
return 0;
}


写完之后感觉有的不足:

把数据输入到链表中的时候只能按系数的大小输入,应该可以用堆排序解决吧!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: