# c语言 单链表实现多项式相加

10 篇文章 0 订阅

1 掌握单链表的基本工作原理;
2 实现链式存储下的两个多项式的相加。

1 定义链式存储的数据结构
2 完成多项式的初始化，即给多项式赋初值
3 完成多项式的输出
4 实现多项式的相加及结果输出。

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

typedef struct LNode{
int coef;
int expn;
struct LNode *next;

/*生成多项式*/
{
int i;
r=*p;  //r指向p的位置
for(i=0;i<m;i++)  //循环生成多项式
{
printf("scanf coef and expn:\n(example:1,2)\nyour num is:");
scanf("%d,%d",&s->coef,&s->expn);  //把数据存入新生成的s中
r->next=s;  //头指针指向s
r=s;   //r移向下一位
}
r->next=NULL;
}

/*打印多项式*/
{
s=p->next;  //p为头指针，s指向首元结点
while(s)   //当s不为空
{
printf("%dX^%d",s->coef,s->expn);
s=s->next;
if(s!=NULL)
{
if(s->coef>=0)   //为什么要多加这一行，删去不行吗？？
printf("+");
}
}
printf("\n");
}

/*判断大小*/
{
if(a->expn<b->expn)//a<b返回-1
return -1;
else if(a->expn==b->expn)//a=b返回0
return 0;
else return 1;//a>b返回1
}

/*多项式加法*/
{
float sum;
p=pa->next;  //p和q分别指向pa和pb的首元结点
q=pb->next;
pc=newp;
while (p&&q)
{
switch(cmp(p,q))
{
case -1:     //当p<q时
s->coef = p->coef;      //将p的系数和指数都存入新生成的s中
s->expn = p->expn;
pc->next = s;       //头节点指向s首元结点
pc = s;      //pc移到下一位
p = p->next;      //p也移到下一位
break;

case 0:     //p=q时
sum = p->coef + q->coef;    //系数求和
if(sum!=0)
{
s->coef = sum;    //系数放入新单元中
s->expn = p->expn;    //取任意p或q的指数放入s中
pc->next = s;    //前一结点指向s
pc = s;     //pc后移一位
}
p = p->next;    //若和为0，p和q直接后移一位
q = q->next;
break;

case 1:
s->coef = q->coef;     //把q的指数和系数都放入s中
s->expn = q->expn;
pc->next = s;     //前一结点pc指向s
pc = s;      //pc后移一位
q = q->next;     //q也后移一位
break;
}
while(p)   //当q空但p后还有元素时，把p接到后面
{
s->coef = p->coef;
s->expn = p->expn;
pc->next = s;
pc = s;
p = p->next;
}
while(q)   //当q空但p后还有元素时，把p接到后面
{
s->coef = q->coef;
s->expn = q->expn;
pc->next = s;
pc = s;
q = q->next;
}
pc->next = NULL;
return newp;
}
}

int main()
{
int L1,L2;
printf("for the first f(x):how many num will you set to the f(x):");
scanf("%d",&L1);
CreatPolyn(&p1,L1);
printf("the first f(x1) is:");
PrintPolyn(p1);
printf("for the secone one:");
scanf("%d",&L2);
CreatPolyn(&p2,L2);
printf("the secone f(x2) is:");
PrintPolyn(p2);
printf("\n");
printf("the resule is:");
}

• 9
点赞
• 44
收藏
觉得还不错? 一键收藏
• 1
评论
08-29
11-25 8495
06-17 869
10-31
08-02 1557
10-28 988
04-14 1万+
12-16 5044

1.余额是钱包充值的虚拟货币，按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载，可以购买VIP、付费专栏及课程。