1 / 32
文档名称:

数据结构实验报告.docx

格式:docx   大小:335KB   页数:32页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

数据结构实验报告.docx

上传人:一花一世 2019/4/2 文件大小:335 KB

下载得到文件列表

数据结构实验报告.docx

文档介绍

文档介绍:西南科技大学数据结构实验报告专业班级____软件1004____任课教师____李学俊______姓名______杨强_______学号____20101469_____实验地点____东六E108_____2011年11月22日实验一一元多项式的加法、减法及乘乘法运算【问题描述】一元多项式的所有运算都可以用其加减运算加以实现。设计一个程序,实现一元多 项式的加法、减法及乘法运算。【基本要求】(1)、分别采用顺序存储和单链表作存储结构。在顺序存储中,一个多项式对应一个结构体数组,数组中的每个节点对应该多项式中的一项,所以每个节点至少包括系数域、指数域。在链式存储中,一个多项式对应一个单链表,链表中的每个节点对应该多项式中的一项,所以每个节点至少包括系数域、指数域及指向下一项的指针域。(2)、一元多项式要求从键盘上加以接收。(3)、运算规则如数学上的多项式的计算,要求能够在屏幕上输出相应的数据。【主要功能】实现两个单链表的加法、减法及乘法运算。【思路分析】存储结构:链式存储; 算法: 加法:两个多项式由键盘接收,输入包括系数部分和指数部分,程序接收完数据后,将按指数对多项式的项进行排序,然后合并同类 项,即得到最简多项式。将两个多项式进行合并同类项操作,即 达到多项式相加的目的。减法:在多项式的减法操作时,将减数的各项系数取反,再与被减多项式进行合并可得多项式相减的结果。乘法:首先进行指数的加减运算,然后做累加,即得多项式相乘的结果。【关键函数】 voidsort_HtoL(LinkList*L); //对表L中各项按降序排列 voidSimplify(LinkList*L); //对表L进行化简 voidSum(LinkList*LA,LinkList*LB,LinkList*&LC)//执行相加运算 voidSub(LinkList*LA,LinkList*LB) //执行相减运算 voidMulti(LinkList*LA,LinkList*LB,LinkList*&L)//执行相乘运算【具体算法】//按指数降序排列;voidsort_HtoL(LinkList*L) { LinkList*p,*q; inttemp_coef,temp_exp; for(p=L->next;p->next!=NULL;p=p->next) for(q=p->next;q!=NULL;q=q->next) { if(p->exp<q->exp) { temp_exp=p->exp; //交换指数; p->exp=q->exp; q->exp=temp_exp; temp_coef=p->coef; //同时交换系数; p->coef=q->coef; q->coef=temp_coef; } }}//合并同类项;voidSimplify(LinkList*L) { LinkList*p; p=L->next; while(p->next!=NULL) { if(p->exp==p->next->exp) { p->coef=p->coef+p->next->coef; //合并; p->next=p->next->next; } else { p=p->next; } }}//LA+LB=LC;voidSum(LinkList*LA,LinkList*LB,LinkList*&LC){ LinkList*p,*q,*s,*r; p=LA->next; q=LB->next; inttemp; LC=(LinkList*)malloc(sizeof(LinkList)); //创建头结点; r=LC; while(p!=NULL&&q!=NULL) { if(p->exp>q->exp) { s=(LinkList*)malloc(sizeof(LinkList)); //复制结点; s=p; r->next=s; r=s; p=p->next; //指向LA的p指针后移; } elseif(p->exp<q->exp) { s=(LinkList*)malloc(sizeof(LinkList)); //复制结点; s->exp=q->exp; s->coef=q->coef; r->next=s; r=s; q=q->next; //指向LB的q指针后移; } else //p->exp=q->exp { temp=p->coef+q->coef; //系数相加; if(temp!=0) //系数之和不为0时创建新结点{ s=(LinkList*)malloc(sizeof(LinkList)); //复制结点 s->exp=p->exp; s->coef=temp; r->next=s; r=s; } p=p->next; q=q->n