数据结构_基于线性表链式存储实现医院多项式相加减_课程设计_实验报告

上传人:第*** 文档编号:55333432 上传时间:2018-09-27 格式:PDF 页数:23 大小:371.75KB
返回 下载 相关 举报
数据结构_基于线性表链式存储实现医院多项式相加减_课程设计_实验报告_第1页
第1页 / 共23页
数据结构_基于线性表链式存储实现医院多项式相加减_课程设计_实验报告_第2页
第2页 / 共23页
数据结构_基于线性表链式存储实现医院多项式相加减_课程设计_实验报告_第3页
第3页 / 共23页
数据结构_基于线性表链式存储实现医院多项式相加减_课程设计_实验报告_第4页
第4页 / 共23页
数据结构_基于线性表链式存储实现医院多项式相加减_课程设计_实验报告_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《数据结构_基于线性表链式存储实现医院多项式相加减_课程设计_实验报告》由会员分享,可在线阅读,更多相关《数据结构_基于线性表链式存储实现医院多项式相加减_课程设计_实验报告(23页珍藏版)》请在金锄头文库上搜索。

1、数 据 结 构 课 程 设 计本课程设计已调试通过,请放心使用。请到:道客巴巴道客巴巴或豆丁网豆丁网充值购买 word 版,省打字,直接修改即可,价格较便宜,在这里百度较贵!搜索:数据结构_基于线性表的链式存储实现医院多项式的相加减_课程设计_实验报告设计题目:基于线性表链式存储实现一元多项式加减目录目录课题名称基于线性表的链式存储实现一元多项式的相加减院系年级专业学号姓名成 绩课题设计目的与设计意义1、课题设计目的: (1).熟练掌握线性表链式存储基本的存储形式:单链表,循环链表以及双链表(2).熟练运用线性表链式存储的基本运算(3).能应用循环链表实现一元多项式的相加减(4).将一元多项式

2、相加减的思想利用 C 语言编写程序在计算机上实现2、课题设计意义: (1).进一步了解循环链表的特点:无须增加存储量,仅对表的连接方式稍作改变,即可使得表处理更加方面灵活(2).学会将数学语言转化为计算机语言(3).懂得课程设计的格式及要求,有利于以后写毕业论文(4).耐心,细心以及广泛的材料收集的成功的前提指导教师:年月日第一章课程设计的目的与意义41.1 课题设计的目的41.2 课题设计的意义4第二章课题设计的内容和要求42.1 课题设计的内容.42.2 课题设计的要求.4第三章问题分析43.1 问题描述43.2 解决途径53.2.1 顺序表与链式表的比较.53.2.2 构造数据类型.5第

3、四章概要设计54.1 构造数据类型54.2 基本运算64.2.1 主函数.64.2.2 输入输出函数.64.2.3 多项式的相加减.6第五章详细分析65.1 思路分析65.2 具体分析75.2.1 主函数.7根据流程图可写出主函数的主要语句75.2.2 输入输出函数.85.2.3 多项式相加95.2.4 多项式相减12第六章 运行结果分析156.1 输入输出分析.156.2 运行结果分析.16第七章 结束语167.1 心得体会与总结.16第八章 源代码17参考文献:22第一章课程设计的目的与意义第一章课程设计的目的与意义1.1 课题设计的目的(1).熟练掌握线性表链式存储基本的存储形式:单链表

4、,循环链表以及双链。(2).熟练运用线性表链式存储的基本运算。(3).能应用循环链表实现一元多项式的相加减。(4).将一元多项式相加减的思想利用 C 语言编写程序在计算机上实现1.2 课题设计的意义(1).进一步了解循环链表的特点:无须增加存储量,仅对表的连接方式稍作改变,即可使得表处理更加方面灵活(2).学会将数学语言转化为计算机语言(3).懂得课程设计的格式及要求,有利于以后写毕业论文(4).耐心,细心以及广泛的材料收集的成功的前提第二章课题设计的内容和要求第二章课题设计的内容和要求2.1 课题设计的内容 利用计算机语言实现一元 n 次多项式的输入输出及其多项式的相加减并正 确输出,并且让

5、别人看得一目了然(即编辑程序界面友好化) 。2.2 课题设计的要求 (1)程序运行需在 Visuai C+的条件下进行 (2)熟悉 C 语言的环境,语句及函数的作用 (3)明确自己课题设计的主题,目的及意义 (4) 熟练掌握线性表链式存储的方式及有关知识 (5) 大量收集资料并整理 (6)良好的语言组织能力与逻辑思维能力第三章问题分析第三章问题分析3.1 问题描述已知 2 个一元多项式,它们的每一项由系数与指数确定。编写程序实现这 2 个 一元n次多项式的相加减, 并能正确输出这两个一元n次多项式及加减后的结果。3.2 解决途径3.2.1 顺序表与链式表的比较 (1)基于空间的考虑 当线性表的

6、的长度变化较大,难以估计其存储规模时,宜采用动态链表作为 存储结构为好;当线性表的长度变化不大,易于事先确定其大小,为了节约存储 空间,宜采用顺序表作为存储结构。 (2) 基于时间的考虑 若线性表的操作主要是进行查找,很少做插入和删除操作时,采用顺序表做 存储结构为宜;对于频繁进行插入和删除的线性表,宜采用链表做存储结构。若 表的插入和删除主要发生在表的首尾端,则采用尾指针表示的单循环链表为宜。 (3)基于语言的考虑 当线性表的长度不变,仅需改变结点间的相对关系时,静态链表比动态链表 可能更方便。 基于以上三点考虑,用计算机语言实现一元 n 次多项式的相加减,应该采用 线性表链式存储的循环链表

7、实现。3.2.2 构造数据类型 在计算机内,我们用一个结点来存放多项式的一项,为了节约空间,并和 书写习惯一致,只需保留非 0 系数的项。每个结点分系数,指数和指针三个域, 如下图 系数指数指针图 1 多项式结点格式建立两条循环链表 A,B 编写程序实现指数相同的项相加。具体思想如下: 若 p1-exp=p2-exp,则将两个结点中的系数相加,当和不为 0 时修改结点p1 的系数,否则修改结点 p2 的系数 若 p1-expp2-exp, 则结点 p2 所指的结点应是“和多项式”中的一项,将结点 p2 插入在结点 p1 之前,且令指针 p2 在原来的链表上后移。 若 p1-expexp,则结点

8、 p1 所指的结点应是“和多项式”中的一项,将结点 p1 插入在结点 p2 之前,且令指针 p1 在原来的链表上后移。第四章概要设计第四章概要设计4.1 构造数据类型 根据上面的解决途径可以对指数,系数及指针进行以下说明: typedef struct pnode int exp;/*指数*/coefexpnextfloat coef;/*系数*/ struct pnode *next; polynode;4.2 基本运算4.2.1 主函数 (1)功能:进入程序,并实现函数调用 (2)数据流入:要输入控制调用函数的序号和是否介绍数字 (3)测试要点:输入的数字能否调用对应的函数思想:(1) 用

9、输入的 i 控制菜单(2)根据输入的 i 对函数进行调用(3)利用菜单实现对程序的控制以及运算的先后顺序(4)再次利用输入的 i 选择程序是否结束4.2.2 输入输出函数 (1)功能:将要进行相加减的一元 n 次多项式输入输出 (2)数据流入:要输入的多项式的系数与指数。 (3)数据流出:合并同类项后的多项式。 (4)测试要点:输入的多项式是否正确,若输入错误则重新输入 思想: (1)首先判断输出的多项式的下一个系数是否为零 (2)如果不为,判断系数是否大于零;则就输出这一项 (3)如果系数大于零,则输出这一项并在后面加“+” ;否则直接输出这一 项 (4)该项输出后,将指针指向下一个4.2.

10、3 多项式的相加减 (1)功能:实现输入的一元 n 次多项式的相加减 (2)测试要点:进行加减运算后(即合并同类项后)的多项式是否正确 思想: (1)将 p1=A-next,p2=B-next,并生成新的结点 p (2)判断 p1,p2 是否同时非空 (3)若不成了再判断 p1,p2 的指数是否相等,反之不做 (4)若 p1,p2 的指数相等,则将 p1,p2 的系数相加或相减,并改变 p1,p2 的指针;若 p1,p2 的指数不相等,则判断 p1,p2 指数的大小,若 p1-expp2-exp, 将 p2 的指数及系数赋给 p,并使 p2 向后移一位 (如 果是相减则将 p2 的系数取反后再

11、赋给 p,指数不变) ,反之将 p1 的 系数及指数赋给 p, 并使 p1 向后移一位, 循环运算, 直到 p1-next=0 或 p2-next=0,在把没比较完的多项式后面的项直接赋到 p 的后面。第五章详细分析第五章详细分析5.1 思路分析 (1)主函数定义所需要的数据类型,并用 switchcase 语句实现各函数的调用 (2)输出函数判断输出多项式的下一个系数是否为零,不为零再判断系数是 否大于零,大于零组输出时在后面加上“+”,否则直接输出 (3)多项式相加定义所需变量,在非空条件下判断指数是否相等,相等则系 数相加,否则再判断指数哪个大,将小是赋给 p,指针向后 移,再判断是否为

12、空,不为零即赋到 p 的后面 (4)多项式相减定义所需变量,在非空条件下判断指数是否相等,相等则系 数相加,否则再判断指数哪个大,将小是赋给 p,指针向后 移,再判断是否为空,不为零即取反赋到 p 的后面5.2 具体分析5.2.1 主函数 模块图如下:图 2主函数的模块图根据流程图可写出主函数的主要语句switch(i) case 0:creatA();break; case 1:creatB();break; case 2:p=polyadd(A,B);break; case 3:printA(A);break;0123456710输入i输 出 多 项 式 D多 项 式 A 与 B 相 减输

13、 出 多 项 式 C输 出 多 项 式 B输 出 多 项 式 A多 项 式 A 与 B 相 加建 立 多 项 式 B建 立 多 项 式 A结束继续case 4:printB(B);break; case 5:printC(p);break; case 6:p=polyminus(A,B);break; case 7:printD(p);break; printf(“ntt0:结束ntt1:继续n“); scanf(“%d“, 5.2.2 输入输出函数 流程图如下NYNYN生成新的结点空间输入多项式的项数输入多项式的系数与指数函数的输出p-next!=NUL Lp-next-coef0输出 p

14、该项的系数与指数并在后面加上 “+”直接输入 p 该项的系数与指数直接输出 p 该项的系数与指数结束开始图 3 输入输出函数流程图根据以上输入输出函数的流程图写出以下主要语句:while(p-next!=NULL)/*判断是否有下一项*/if(p-next-coef0)/*判断下一项的系数是否大于零*/printf(“%.2fx%d+“,p-coef,p-exp);elseprintf(“%.2fx%d“,p-coef,p-exp);p=p-next;printf(“%.2fx%d“,p-coef,p-exp);主要思想是:判断下一项是否为空,不空再判断下一项系数是否大于零,大于零则输出该项并

15、在后面加上 “+” , 否则直接输出; 若下一项为空则直接输出该项。5.2.3 多项式相加 根据以上的思想分析,可画如下流程图图 4多项式相加流程图p1-expp2-expNN将 p2 剩下的 项的指数及 系数赋给 pNNY开始生成新的结点空间 p 并将建立的多项 式赋给新定义的共用体类型 p1,p2P1,p2 是否有 空的p1-exp=p2-exp将该项系数相加,并赋给 xX=0?将相加后的系数赋给 p 的系 数,将指数赋给 p 的指数将 p1 的指数及系数 赋给 p 的指数和系数将 p2 的指数及系数赋 给 p 的指数和系数p1=p1-next p2=p2-next ;判断 p1 是否 为

16、空判 断 p2 是 否为空将 p1 剩下 的 指 数 及 系数赋给 p结束YYYYNYN图 4多项式相加流程图在单链表中,从已知结点出发,只能访问到该结点及其后续结点,无法找到该 结点之前的其他结点。而在循环链表中,从任一结点出发都可访问到表中所有结 点,这一优点使得某些运算在单循环链表上易于实现。 两个多项式相加的运算规则很简单,即对所有指数相同的项,将其对应系数 相加,若和部位零,则构成“和多项式”中的一项,将所有指数不相同的项复制 到和多项式中。根据以上流程图以及多项式相加的运算规则和单循环链表的性质可以编写 以下主要语句:while(p1/*将 p1,p2 该项的系数相加,并赋给 x*/ if(x!=0)/*判断相加后的系数是否为零*/ p-next=(polynode*)malloc(sizeof(polynode);/*生成心结点*/ p=p-next;/*改变 p 的指向*/ p-coef=x;/*将 x 赋

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号