数据结构多项式表示与相加-实验报告.doc
文本预览下载声明
实验报告
姓名:张雅展 学号:p实验名称:一元多项式的表示与相加
实验目的:明确链表的生成与插入删除及输出。
源代码如下:
#includestdio.h
#includemalloc.h
typedef struct Elem{ //定义元素结构体类型
float ceof;
int expn;
}Elem;
typedef struct PNode{ //定义节点结构体类型
Elem data;
struct PNode *next;
}PN;
PN *Creatpoly() //生成多项式函数
{
PN *p,*q,*h;
int m,i;
if(!(p=h=(PN*)malloc(sizeof(PN)))) //申请头节点,不成功输出ERROR
printf(ERROR\n);
printf(请输入多项数的项数:\n);
scanf(%d,m);
printf(请输入各项系数及指数(指数为升序):\n);
for(i=1;i=m;i++) //开始生成多项式链表
{
q=p;
p=(PN*)malloc(sizeof(PN));
q-next=p;
scanf(%f,%d,(p-data.ceof),(p-data.expn));
p-next=NULL;
}
printf(\n);
printf(多项式已生成,多项式为:\n);
p=h-next;
while(p){ //输出多项式
printf(+%7.2fX^%d,p-data.ceof,p-data.expn);
p=p-next;
}
return(h); //返回头结点
}
int comp(int a,int b){ //比较值函数
if(ab)return 1;
if(ab)return -1;
else return 0;
}
void AddPoly(PN *ha,PN *hb) //多项式相加函数
{
PN *pa,*pb,*qa,*qb;
float sum;
int a,b;
pa=ha-next;
pb=hb-next;
qa=ha;
qb=hb;
while(papb){
a=pa-data.expn;
b=pb-data.expn;
switch(comp(a,b)){
case -1:
pa=pa-next;
qa=qa-next;
break;
case 0:sum=pa-data.ceof+pb-data.ceof;
if(sum!=0.0){
pa-data.ceof=sum;
pa=pa-next;
qa=qa-next;
pb=pb-next;
free(qb-next);
qb-next=pb;
}
else{
pa=pa-next;
pb=pb-next;
free(qa-next);
qa-next=pa;
free(qb-next);
qb-next=pb;
}
break;
case 1:
qb-next=pb-next;
qa-next=pb;
pb-next=pa;
pb=qb-next;
break;
}
}
if(pb)pa-next=pb;
free(hb);
printf(相加后的多项式为:\n);
pa=ha-next;
while(pa){ //输出相加后的多项式
printf(+%fX^%d,pa-data.ceof,pa-data.expn);
pa=pa-next;
}
}
void main()
{
PN *ha,*hb;
printf(\n);
ha=Creatpoly();
printf(\n);
hb=Creatpoly();
printf(\n);
printf(%x\n%x,ha,hb);
AddPoly(ha,hb);
}
运行状况如图:
显示全部