C语言 数据结构实习报告

上传人:ni****g 文档编号:564386592 上传时间:2023-03-04 格式:DOCX 页数:29 大小:317.42KB
返回 下载 相关 举报
C语言 数据结构实习报告_第1页
第1页 / 共29页
C语言 数据结构实习报告_第2页
第2页 / 共29页
C语言 数据结构实习报告_第3页
第3页 / 共29页
C语言 数据结构实习报告_第4页
第4页 / 共29页
C语言 数据结构实习报告_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《C语言 数据结构实习报告》由会员分享,可在线阅读,更多相关《C语言 数据结构实习报告(29页珍藏版)》请在金锄头文库上搜索。

1、西安邮电大学(计算机学院)数据结构与算法课程设计报告题 目:哈夫曼编码 /学生信息管理系统专业名称:班 级:学生姓名:学号(8位):指导教师:设计起止时间一.设计目的1。通过设计实现哈夫曼编译码,进一步加深对树的应用与操作能力2通过设计一个小型的管理系统,来进一步加深、巩固C语言程序设计以及数据结 构与算法课程中所学习的基本理论知识,用理论联系实际;进一步培养自身综合分析问题、 解决问题的能力;3掌握C语言程序的基本结构和基本的数据的结构;熟悉C语言编辑、编译、调试、运 行的过程;4。了解程序设计的一般方法,结构化程序设计思想;熟悉常用的程序结构与算法,提升 自身实践操作能力二.设计内容1.

2、求数据的哈夫曼编码哈夫曼树又叫最优二叉树,可以来构造最优编码,用于信息传输、数据压缩等方面。本 次设计主要是实现哈夫曼树的构造,以及求哈夫曼编码,达到可以根据用户的需求输入 任意个字符及其权值,之后便可以给出各个字符的编码值的要求。2. 学生信息管理系统应用C语言程序设计以及数据结构与算法课程中的结构体、函数、指针、文 件、链表等内容,设计一套完整学生信息管理系统,满足对一个班的或者更多的学生基本信 息进行输入、输出、查询、删除等管理的要求.本系统设计,主要运用了链表,用链表来完成各项功能,并对文件进行写入于读取操作, 将学生的基本信息全部从一个指定的文件中导出并显示出来,然后运用其它函数模块

3、依次 进行增加、修改、查询、删除,并随时可以保存和显示已有学生的信息。三设计方案概要设计1求哈夫曼编码设计(1) 初始化从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树。(2) 编码。利用已建好的Huffman树,从叶子结点开始,沿着结点的双亲追溯到根节 点,追溯过程中,每上升一层,左分支得到0,右分支得到1,。将得到的编码依次保 存到数组里去,最后把字符及编码输出出来2. 学生信息管理系统功能模块图;管理员用户注册、登陆学生信息管理系统从文件导入学 生信息并显示修改学生信 息查询学生信息删除 学生 信息显示已录入信息序号查找学号查 找3. 哈夫曼编码程序各个模块详细的功能描述选择

4、函数:在数组 ht 的前 i1 项中选取出双亲为零,且权值最小的两个结点 创建哈夫曼树函数: 通过初始化结点,接受用户录入的信息,构建出哈夫曼树. 求哈夫曼编码函数:通过对结点遍历,及对其双亲的追溯,给出各个数据的哈夫曼编码4. 学生信息管理系统各个模块详细的功能描述 登陆模块:用户可以选择注册、登陆、退出功能。只有注册,并成功登陆后方可进行学生信息管理。显示模块:可以将已指定的文件中的学生信息、修改后的学生信息全部显示出来.增加模块:可以在此功能中增加任意多个学生信息,并保存修改模块:可以对你输入要修改的序号的学生信息,进行修改 ,并保存到文件中查询模块:可以对你根据序号、或者学号查询对应同

5、学的相信信息 删除模块:可以对你输入要删除的序号的学生信息,进行删除详细设计1功能函数的调用关系图; 哈夫曼编码程序主要函数有:选择函数:select (HuffmanTree ht, int n, int 大 sl,int 大 s2)创建哈夫曼树函数:CrtHuffmanTree(HuffmanTree ht,int n)求哈夫曼编码函数: CrtHuffmanCodel(HuffmanTree ht,int n)学生信息管理系统主要包含以下函数:1。登陆函数:denglu(); 2。注册函数:zhuce() ; 3.显示函数:DispList (LinkList L );4。增加信息函数:

6、ListInsert(LinkList L);5。修改函数:Modily (LinkList L);6. 删除函数: ListDelete(LinkList L)7. 查询函数: GetElem(LinkList L) ;它们调用的关系如下图:2哈夫曼编码的流程图结束3。学生信息管理系统各功能函数的数据流程图;登陆函数:显示函数:增加学生信息函数:是否继续修改删除函数:查找函数:修改函数:开始输出该同学信息是否结束是否继续修 改判断是否存在 该同学输入要修改学 号存在不存在根据选择,进行修改4。哈夫曼编码的重点设计及编码利用已建好的Huffman树,从叶子结点开始,沿着结点的双亲追溯到根节点,

7、追溯过程 中,每上升一层,左分支得到0,右分支得到1。将得到的编码依次保存到数组里去, 最后把字符及编码输出出来。详细设计见源程序中 CrtHuffmanCodel(HuffmanTree ht, int n)学生信息管理系统的重点设计及编码。1。运用链表操作实现用户注册、登陆功能。首先定义一个包含用户名及密码的结构体, 在内存中申请一段空间将用户的注册的账户名、密码依次保存到对应节点中去,并保存至 文件中去;当用户登录时,通过调取文件中的信息,并依次进行比对,仅有用户名及密码完 全与注册时相同时,才可进入管理系统进行信息管理操作,有效保障了信息的安全性。详细代码见附录源程序中函数 zhuce

8、(), denglu()四测试数据及运行结果1哈夫曼编码程序运行结果G:vc 4- + 6.O_win8C0rnmonMSDev98BinD Eb得到.电艾 e需要箱的字符个数为 舊输入第1个字符及其权值请输入第2个字符及其权值 齧為入第3个字符及其权值 幫爲入第4个字符及其权值 翳和的编码|字符h的编码为11字符的编码为11字符d的编码为Press any key to continuenGAvc+6.0_win QC ommonMSD ev9 8B i nDebu 得到.exen魯要叔的字符个薮为 肯输人第1个字符及其权值1,1请输衣第2个字符及其权值 底常入鄴个字符及其权值誇爲衣第4个字

9、符及其权值 请输貞第吕个字符及其权值 le ,5请输灵第石个字符及其权值 綽初的编码为m0竽符b的编码为till字符谢编码为110字符读的编码为QQ字符总的编码为字符F的编码为10Press any key to cont in LieG:vc + + 6.0_win 8C ommoriMS &ev9 3 B i rDe b u g得到.exe碍要输入的字符个数为“E青输共第i个字符及其权值 aP 36 修输蓟第2个字符及其权值b, 3B隔输入第2个字符及其权值c, 46青输養第4个字符及其权值d, 5毎障输纓第$个字符及其权值F,4 字符的编码为 011 字符h的编码为字符&的编码为字符d的

10、编码为旱符F的编码为回越Pi-ess anv key to continLie2. 学生信息管理系统正常测试数据和运行结果登陆界面注册界面显示已经导入的学生信息增加学生信息删除学生信息修改学生信息2异常测试数据及运行结果在求哈夫曼编码中由于输入的字符无法识别导致运算出错为IE G: v -i-+6.0_win SCo frmonMDev9SBinDebu g得到.exe.r主冃冃主耳),土冃土冃土冃输叭第1个字符及其权值eOilS.及及壬X十由于没有按照要求输入 Y/N 导致删除函数陷入死循环由于恶意注册的不合法用户信息,导致系统无法正常打开 运行五调试情况,设计技巧及体会1对哈夫曼编码程序的

11、评价及改进方案评价:该程序设计较为良好,能根据用户输入的字符及其权值,构造出对应的二叉树,并求 出各个字符对应的哈夫曼编码并打印出来。不足:只是输出字符的对应的哈夫曼编码,没有形象地打印出用户输入权值对应的最优二 叉树;选择select()函数应用的是较为低级的两次循环遍历法,方才找出较小的两个元素, 增加了程序的时间复杂度。改进方案:应用更高级简单的选择算法,降低该程序的时间复杂度;编写输出函数,以便于 打印出较为形象直观的二叉树形式.2.对学生管理系统的评价及改进方案评价:该程序总体设计完好,可以满足用户的注册、登陆、增加、查询、删除、修改 学生信息的使用要求。尤其对登陆界面管理员用户注册

12、、密码功能的设置,有效的保证了信 息的安全性;并且使用链表来进行储存密码、验证密码保证了正确率;从文件中读入学生 信息设计比较好,可以很方便地大批量的增加与删除、修改学生信息;操作简单,方便用户使 用。不足:页面不够美观,尤其管理界面视觉效果较差;健壮性不够,当用户不按照提示 或者失误的操作后容易导致运行错误甚至,系统崩溃;可输入的学生信息种类不够多,仅 有学号、姓名等;功能不够完善,无法为用户提供排序,分类筛选等功能。改进方案:调用C语言的图形设计中的颜色、图案设计程序,让操作界面美观,提升用 户体验;完善程序中的条件判断种类,以识别错误的操作,及时终止程序,防止运行失败的 出现,增强程序的

13、健壮性、容错性、可操作性;增加程序的功能,进一步设计用学生序号、 学号等排序操作,以更方便用户;增大输入学生信息的信息种类,完善学生的信息,如增加 家庭住址、联系方式等。3。体会此次 C 语言数据结构与算法课程实习,是我在老师的指导下第一次完成一个完整系统 的设计,也是第一次用C语言写下了超过500行的代码;同时这次实习是一次对以往学习的 程序设计知识掌握情况的检验,也是对所学知识的应用、巩固与提高。实习刚开始由于基础不是太扎实,对算法的掌握不够深入,常常犯一些错误,诸如加错标 点符号;数组的下标越界、混乱,或是指针超出范围等。我在老师的指导下,慢慢地学会了 如何自我调试程序,如何寻找错误的地方,从而提高了学习的效率,学到了很多通过这次实习,我在一次又一次地对错误的更正中,对设计思路的调整中,以及与老 师、同学交流过程中,进一步掌握了程序设计的思想方法、设计理念,对C语言程序设计、 数据结构与算法,尤其对链表、文件的操作与应用有了更深刻的认识。那一次次为“叮叮 响起的错误报告而抓耳挠腮,一次次为一条语句的设计而争执不下,以及当自己的设计在 屏幕上显示时的喜悦,这些都是实习的收获与进步,更是一段段难忘

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

当前位置:首页 > 学术论文 > 其它学术论文

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