数据结构实验多项式加法
数据结构实验报告
实验名称:多项式加减法
学号:19
姓名:林强
实验日期:一、实验目的
通过实现多项式的加减法,对链表有更深入的了解
二、实验具体内容
1、实验题目1:
(1)题目设计一个一元稀疏多项式简单的加减法计算器
实现要求:
一元稀疏多项式简单计算器的基本功能是:
(1)输入并建立多项式:
85
17
A+
x
+
x
=;
+
7
3
x
9
)
(x
79
8
x
B-
+
x
=
8
22
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
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<<"
请输入数据:
"< 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=L1->next; }// 输出计算结果 } 三、实验小结 通过编写多项加法这个程序,我将自己所学到的创建链表, 初始化链表和多项式加法算法都应用了一次,这使我们不仅仅只 是理论化的学习书本上的知识,而是将学习到的理论知识应用到 实际的操作中来增强我们的实际操作能力,这使我增加了实际操 作经验,也使我通过实际操作来认识到自己在程序编写上的不足 从而增强了我的实际编写程序的能力。