title: 线性表操作(一元多项式的运算)
date: 2018-10-26 11:22:37
tags: 数据结构
categories: 数据结构
线性表操作(一元多项式的运算)
实验目的
1、定义线性表的链式存储
2、实现对线性表的一些基本操作和具体函数定义
实验要求
1、定义线性表的链式存储;
2、实现对线性表的一些基本操作和具体函数定义。
3、定义输出一元多项式的函数;
4、编写主程序调用上面的函数实现一元多项式的加减。
数据输入输出要求
输入示例
3
2 3
3 4
5 7
5
2 1
3 3
-3 4
4 6
5 7
(说明:第一个数据3表示该第一个一元多项式的项数为3,后面的2 3 表示第一项的系数为2 指数为3;按指数递增的次序输入)
输出示例
一元多项式1: 2x(3)+3x(4)+5x(7)
一元多项式2: 2x(1)+3x(3)-3x(4)+4x(6)+5x(7)
加的结果:2x(1)+5x(3) +4x(6)+10x(7)
减的结果:-2x(1)-1x(3)+6x(4)-4x(6)
代码
#include<bits/stdc++.h>
typedef struct polynode
{
float coef; //系数
int expn; //指数
struct polynode *next;
}polynode,*polylist;
int s=1;
void poly_create(polylist &L) //多项式链表创建
{
int m;
printf("请输入第 %d 个一元多项式项数:",s);
scanf("%d",&m);
L=(polylist)malloc(sizeof(polynode)); //申请头节点指针
polylist p;
p=L;
for(int i=1;i<=m;i++)
{
p->next=(polylist)malloc(sizeof(polynode)); //不断申请
p=p->next;
printf("请输入第 %d 项的系数:",i);
scanf("%f",&p->coef);
printf("请输入第 %d 项的指数:",i);
scanf("%d",&p->expn);
}
p->next=NULL;
}
void display(polylist L) //打印多项式
{
polylist p;
p=L->next;
printf("%.0fx(%d)",p->coef,p->expn);
p=p->next;
while(p!=NULL)
{
if(p->coef>0)
{
printf("+%.0fx(%d)",p->coef,p->expn);
}
else
{
printf("%.0fx(%d)",p->coef,p->expn);
}
p=p->next;
}
printf("\n");
}
void add(polylist La, polylist Lb, polylist &Lc)
{
polylist pa,pb,pc;
pc=(polylist)malloc(sizeof(polynode));
Lc=pc;
pa=La->next;
pb=Lb->next;
float x;
while (pa&&pb)
{
//int EXPN;
if(pa->expn==pb->expn) //指数相同
{
//EXPN=pa->expn;
x=pa->coef+pb->coef;
if(x)
{
pc->next=(polylist)malloc(sizeof(polynode));
pc=pc->next;
pc->coef=x;
pc->expn=pa->expn;
}
pa=pa->next;
pb=pb->next;
}
else
{
pc->next=(polylist)malloc(sizeof(polynode));
pc=pc->next;
if(pa->expn<pb->expn)
{
pc->coef=pa->coef;
pc->expn=pa->expn;
pa=pa->next;
}
else
{
pc->coef=pb->coef;
pc->expn=pb->expn;
pb=pb->next;
}
}
}
while(pa)
{
pc->next=(polylist)malloc(sizeof(polynode));
pc=pc->next;
pc->coef=pa->coef;
pc->expn=pa->expn;
pa=pa->next;
}
while(pb)
{
pc->next=(polylist)malloc(sizeof(polynode));
pc=pc->next;
pc->coef=pb->coef;
pc->expn=pb->expn;
pb=pb->next;
}
pc->next=NULL;
}
void subtract(polylist La,polylist Lb,polylist &Lc)
{
polylist pa,pb,pc;
pc=(polylist)malloc(sizeof(polynode));
Lc=pc;
pa=La->next;
pb=Lb->next;
float x;
while (pa&&pb)
{
//int EXPN;
if(pa->expn==pb->expn) //指数相同
{
//EXPN=pa->expn;
x=pa->coef-pb->coef;
if(x)
{
pc->next=(polylist)malloc(sizeof(polynode));
pc=pc->next;
pc->coef=x;
pc->expn=pa->expn;
}
pa=pa->next;
pb=pb->next;
}
else
{
pc->next=(polylist)malloc(sizeof(polynode));
pc=pc->next;
if(pa->expn<pb->expn)
{
pc->coef=pa->coef;
pc->expn=pa->expn;
pa=pa->next;
}
else
{
pc->coef=pb->coef;
pc->expn=pb->expn;
pb=pb->next;
}
}
}
while(pa)
{
pc->next=(polylist)malloc(sizeof(polynode));
pc=pc->next;
pc->coef=-pa->coef;
pc->expn=pa->expn;
pa=pa->next;
}
while(pb)
{
pc->next=(polylist)malloc(sizeof(polynode));
pc=pc->next;
pc->coef=-pb->coef;
pc->expn=pb->expn;
pb=pb->next;
}
pc->next=NULL;
}
int main()
{
polylist La,Lb,Lc,Ld;
poly_create(La);
s++;
poly_create(Lb);
printf("一元多项式1:");
display(La);
printf("一元多项式2:");
display(Lb);
add(La,Lb,Lc);
printf("加的结果:");
display(Lc);
subtract(La,Lb,Ld);
printf("减的结果: ");
display(Ld);
return 0;
}