- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构
课程设计报告
设计题目:题目1:
题目2:
专 业
班 级
学 生
学 号
指导教师
目 录
一、具体任务
二、软件环境
三、算法设计思想及流程图
四、主要变量、函数介绍
五、运行结果
六、收获及体会
参考文献
具体任务
1、链表应用:设计程序以实现任意两个高次多项式的加法和减法运算。
要求:(1)所设计的数据结构应尽可能节省存储空间;
(2)程序的运行时间尽可能少。
2、哈夫曼树应用:设计程序以实现构造哈夫曼树的哈夫曼算法
要求:(1)从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树并保存,并将哈夫曼树以直观的方式(比如树)显示在终端上;利用已经建好的哈夫曼树构造哈夫曼编码,并输出结果;
(2)求解所构造的哈夫曼树的带权路径长度。
二、软件环境
Microsoft visual c++ 6.0
算法设计思想及流程图
设计思想:
1、链表应用
(1)建立高次多项式:先为多项式链表分配空间,再输入其中一项的系数和指数,构建多项式链表。
(2)高次多项式加法运算:从两个多项式的头部开始,当两个
多项式的指数相等时,系数就相加;当前一个多项式中的
某一项的指数与后一个中的某项指数不等时,就应该把小
指数那一项的节点复制到多项式中;当一个多项式为空,
另一个不为空时,应将不为空的那个多项式用新节点产
生。
(3)高次多项式减法运算:与高次多项式加法运算相似。当两个多项式指数相等时,系数相减;当前一个多项式中的某一项指数与后一个中某项指数不等时,就应该把后一个多项式中的那项节点复制到多项式中,同时,前一项也复制到多项式中,并且这一项的相反数作为新建的节点的系数;当前一个多项式空,后一个不空时,将后一个多项式用新节点产生,当后一个空,前一个不空时,则前一个多项式用新节点产生,且其相反数作为新节点的系数。
(4)输出函数并提供输入多项式的方法,以及实现加减运算。
2、哈夫曼树应用
(1)构造哈夫曼树:根据给定的权值构成二叉树集合,其中每棵二叉树中只有一个带权的根节点,其左右子树均为空;在二叉树集合中选取两棵根节点权值最小的树作为左右子树构造一棵新的二叉树,且新的二叉树的根节点的权值为其左、右子树上根节点的权值之和;在二叉树集合中删除这两棵树,并将得到的二叉树加入集合中;重复上述步骤,直至二叉树集合中只含一棵树为止。
(2)哈夫曼编码:构造出哈夫曼树后,根据函数定义的双亲左孩子为0,右孩子为1,标出从叶子结点到根这条路径上的0或1,逐个字符求编码。
(3)求带权路径长度:先求每个叶子结点到树根之间的路径长度与该叶子结点所带权值之积,在将所得之积求和。
四、主要变量、函数介绍
1.链表应用
A.#includestdio.h提供输入输出函数
#includestdlib.h提供malloc函数
int j;定义一个结点结构体
定义结点结构体Lnode,
结构体指针变量*next。
B.菜单
void menu()
{
printf(\n链表应用!\n两个高阶多项式的加减运算!\n请选择运算:0、构建 1、加法 2、减法 3、输出 4、退出\n);
}
C幂数从小到大构成多项式
struct Lnode *creat(int c)
{
int i,d;
struct Lnode *head,*p;
head = (struct Lnode *)malloc(sizeof(struct Lnode));//为多项式链表分配空间
head-next = 0;//初始化
printf(\n由0次到%d次输入第% d个多项式的每项系数(若无该项则系数为0):,j,c);
for(i = 0;i = j;i++)//构建链表
{
scanf(%d,d);
p = (struct Lnode *)malloc(sizeof(struct Lnode));
p-data = d;
p-next = head-next;
head-next = p;
}
return(head);//返回头指针
D 加减法函数将两个多项式对应系数相加相减
struct Lnode *jia(struct Lnode *head1,struct Lnode *hea
您可能关注的文档
最近下载
- 电商孵化园运营方案.pdf VIP
- 初中物理竞赛试题精选精编第07讲物态变化(含答案与解析).docx VIP
- ISO22000-2018 食品安全管理体系 食品链中各类组织的要求(可编辑可复制).docx VIP
- 初中物理竞赛试题精选精编第10讲质量与密度(含答案与解析).docx VIP
- 乡村振兴战略下红色旅游发展路径研究——以沂蒙革命老区为例.pdf VIP
- 四川建筑职业技术学院高等数学(一)复习答案学生版.doc VIP
- 《陈士铎医学全书》.doc VIP
- led灯具的结构基础知识.pdf VIP
- Yamaha雅马哈 CS-R5 英文说明书.pdf VIP
- 中信建投-金融-证券行业深度报告:券商-金融科技标的的弹性测算及对比.pdf VIP
文档评论(0)