- 1、本文档共19页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《数据结构》协同作业试验项目文档—— 第二组
上海交通大学网络教育
数据结构协同作业实验
线性表
1 顺序表操作验证 2
1.1 实验目的 2
1.2 实验内容 2
2 一元多项式相加实验 2
3 开发环境 2
4 算法设计介绍 3
4.1 设计思路 3
4.2 详细设计 6
5 界面流程展示 7
6 检查及测试报告 9
6.1 检查报告 9
6.2 测试报告 9
7 附程序源代码 10
7.1 一元多项式验证: 10
7.2 顺序表操作验证: 17
顺序表操作验证
实验目的
掌握线性表的顺序存储结构;
验证顺序表及其基本操作的实现;
掌握数据结构及算法的程序实现的基本方法。
实验内容
建立含有若干个元素的顺序表;
对已建立的顺序表实现插入、删除、查找等基本操作。
一元多项式相加已知 A( x )= a0 + a1x + a2x2 + …… + anxn 和B(x) = 0 + b1x + b2x2 +…… + amxm ,并在 A( x ) 和 B( x ) 中指数相差很多,求 A( x ) = A( x ) + B(x) 。软件平台Windows XP
软件环境:Microsoft Visual C++ 6.0
最低硬件配置:内存64MB、硬盘3.2G
算法设计介绍
设计思路
分析:
1.存储结构分析
根据一元多项式的特点,要表示一个多项式,只要存储第i项以及ai的值,并且如果ai为0的话,该项就不用存储了,从而减少一个存储空间。在线性表中可以通过顺序和链式存储,并用Ti表示一个数据项Ti=(ai,i)。下面以图示表示两种存储结构(假设a2=0)。
图1 顺序存储表
图2 单链表存储
以上两个图可知,在存储空间分配量上两种结构是一致的,但如果两多项式相加的话需要频繁的做插入操作,顺序表的结构特性决定了插入操作的时间复杂度为O(n/2),链式表的时间复杂度为O(1),并且如果存储的是一个排好序的多项式的话,不需要双向查找,因此选择单链表存储。
2.相加算法分析
首先,由于两个多项式A(x)和B(x)的指数相差非常多,因此一定要把输入的多项式按照指数i排好序,防止过高的查找时间复杂度;其次,两个AB多项式同时从head开始查找,AB指数i相同的计算相加ai值存入A表,并且回收不需要的B空间,指数不同的,B指数小的节点插到A指数大的前面。以此往后推移。其时间复杂度为O(n)。
举例:
A(x)=2+3x+1x3
B(x)=1+3x+2x2+2x4+12x7+32x8+42x11+2x12
整个相加过程如下:
见注释1
图3 初始化后的A(x) pA=headA
图4 初始化后的B(x) pB=HeadB-next
第一步:
图5 A(x) pA-next系数+pB系数
图6 B(x) pA-next指数0与pB指数0相等 free pB所指节点
第二步与第一步做法一致
第三步 将pB的节点插入pA后
第四步pA-next指数小于pB指数,pA=pA-next, pB不动
第五步pA没有后继节点,直接把pB的所有节点接到pA后即可
详细设计
数据结构
typedef struct term {
float coef; //系数
int expn; //指数
struct term *next //指向下一节点
} term
输入输出
输入:两个多项式A,B
输出:A+B
样式:
输入一元多项式的项数
2
请依次输入非零2个非零项,请注意输入格式
2 2
3 3
3X^3+2X^2
1~4 (+ - * 退出)4个选项
再输入一元多项式的项数
3
请依次输入非零3个非零项,请注意输入格式
2 2
3 3
4 4
3X^3+2X^2 + 4X^4+3X^3+2X^2 = 4X^4+6X^3+4X^2
函数原型
主函数:void main()
输入函数: InputPolynomial(LinkList p)
多项式相加函数: term* APolyn(term *Pa, term *Pb)
多项式相减函数: term* BPolyn(term *Pa, term *Pb)
多项式相乘函数: term* CPolyn(term *Pa, term *Pb)
输出函数: void PrintfPoly(term *P)
界面流程展示
第一步:先输入第一个“一元多项式的项数”
第二步,根据一元多项式的项数,输入非零项。注意输入格式,系数和指数之间要有空格。第三步,选择要进行的运算方式编码
第四步,再输入第二个“一元多项式的项数”,方式如第二步一致,最后回车进行运算
检查及测试报告
检查报告
检查名称 检查任务 完成情况 是 否 安装 程序运
文档评论(0)