当前位置:文档之家› 数据结构实验多项式加法

数据结构实验多项式加法

数据结构实验报告
实验名称:多项式加减法
学号:1200310419
姓名:林强
实验日期:2015.5.05
一、实验目的
通过实现多项式的加减法,对链表有更深入的了解
二、实验具体内容
1、实验题目1:
(1)题目设计一个一元稀疏多项式简单的加减法计算器
实现要求:
一元稀疏多项式简单计算器的基本功能是:
(1)输入并建立多项式:
85
17
A+
x
+
x
=;
+
3
9
x
7
)
(x
79
8
x
B-
+
=
x
22
8
x
)
(x
(2)输出多项式
(3)多项式A和B相加,建立多项式C=A+B,并输出相加的结果多项式C
(4)选作:多项式A和B相减,建立多项式C=A-B,并输出相加的结果多项式D (2)分析
1:本程序的任务是实现两个多项式的加法其中多项式的系数为浮点型,
指数为整数,输出的结果也为系数和指数。

(1)输入的形式和输入值的范围:
输入多项式的系数a和未知数X的指数b,当a和b都为零时,输入结束。

输入值的范围:a为实数,b为整数。

(2)输出形式:输出多项式的系数和多项式未知数X的指数即(a,b)形式。

(3)程序所能达到的功能,实现两个多项式的加法,并输出最后的结果
2:
整个程序运行期间实行动态创建节点,一边输入数据,
一边创建节点当将全部数据输入到单链表中后再调用多项式加法这
个函数,并一边实现多项式的相加,一边释放节点,有效防止了
在程序反复运行过程中可能出现系统空间不够分配的现象
(3)实验代码
typedef int Status;
#define OVERFLOW -1
#define null 0
typedef struct Lnode{
float coef; //
存储项系数
int expn;//
存储项指数
struct Lnode *next;
}Lnode,*LinkList;
typedef LinkList polynomial;
Status InitList_L(LinkList &L) {//
初始化头节点
L=(LinkList)malloc(sizeof(Lnode));
if(!L)
return(-1);
L->next=null;
return 1;
}
void AddPolyn(polynomial pa, polynomial pb){ //实现两个多项式相加的算法
float x;
polynomial qa;
polynomial qb;
polynomial s;
polynomial u;
qa=pa->next; qb=pb->next; s=pa;
while(qa&&qb){
if(qa->expn<qb->expn){
s=qa;
qa=qa->next;
}
else if(qa->expn==qb->expn){
x=qa->coef+qb->coef; if(x!=0){
qa->coef=x;
s=qa;
qa=qa->next;
u=qb;
qb=qb->next;
free(u);
}
else{
s->next=qa->next;
free(qa);
qa=s->next;
u=qb;
qb=qb->next;
free(u);
}
}
else if(qa->expn>qb->expn){
u=qb->next;
s->next=qb;
s=qb;
qb->next=qa;
qb=u;
}
}
if(qb)
qa->next=qb;
free(pb);
}
void main(){
float a;
int b;
polynomial L1;
polynomial L2;
LinkList q;
LinkList p;
LinkList m;
LinkList n;
InitList_L(L1);
q=L1;
InitList_L(L2);
p=L2;
cout<<"
请输入数据:
"<<endl;
for(;;){
cin>>a;
cin>>b;
if(a==0&&b==0)
break;
m=new Lnode;
m->coef=a;
m->expn=b;
q->next=m;
q=m;
q->next=null;
}//
循环输入第一个多项式的系数与指数for(;;){
cin>>a;
cin>>b;
if(a==0&&b==0)
break;
n=new Lnode;
n->coef=a;
n->expn=b;
p->next=n;
p=n;
p->next=null;
}//
循环输入第二个多项式的系数与指数
AddPolyn(L1,L2);//
调用多项式相加的算法
while((L1->next)!=null){
cout<<"("<<L1->next->coef<<","<<L1->next->expn<<")"<<" ";
L1=L1->next;
}//
输出计算结果
}
三、实验小结
通过编写多项加法这个程序,我将自己所学到的创建链表,
初始化链表和多项式加法算法都应用了一次,这使我们不仅仅只是理论化的学习书本上的知识,而是将学习到的理论知识应用到实际的操作中来增强我们的实际操作能力,这使我增加了实际操作经验,也使我通过实际操作来认识到自己在程序编写上的不足从而增强了我的实际编写程序的能力。

相关主题