课程设计题目:哈夫曼树的应用及单链表的基本操作。
一、课程设计目的。
1、熟悉c语言程序的编辑、编译链接和运行的过程,至少能够用一种编译器较熟练地编辑、编译及调试程序。
2、综合应用所学的计算机基础知识和所掌握的程序设计语言。
3、学习并掌握程序设计语言中指针、链表的定义操作,构造哈夫曼树的相关操作。
4、自行设计并实现一个较为完整的对文本文件进行编码、解码的设计与开发。
5、通过系统分析、系统设计、编程实现,写实验报告等环节, 初步掌握软件系统的设计方法和步骤。
6、锻炼大家灵活运用程序语言进行软件开发的初步能力,提高分析问题和解决问能力。
7、综合应用程序设计语言的知识,实现一个完整的系统,提高编程能力,体会软件程序的开发过程。
8、培养学生独立完成程序课程设计的能力,提高程序设计水平。
二、课程设计内容。
1、使用哈夫曼树和哈夫曼编码的有关知识设计一个哈夫曼编/译码器(附一单链表基本操作系统)
1)读取文本文件,并统计文件中字母个数。
2)建立huffman树。
3)对文件进行huffman编码:文本文件统计字母个数建立哈夫曼树建立哈夫曼编码(利用已经建立好的哈夫曼树) 读取文件,对文件进行哈夫曼编码,并将每个字母对应的哈夫曼编码写入到一个新文件。
4)对文件进行huffman解码:读取存放哈夫曼编码的文件解码将解码后的字母存入新文件中。
5)结果:比较源文件和解码后的文件是否一致。
2、采用线性表的链式存储结构,做一单链表基本操作系统,完成对信息的插入,删除、逆置的操作。
3、执行编译操作,并根据提示调试此程序,排除所有的错误和警告,直到编译成功为止。
4、执行运行操作,逐一对每个模块进行调试,直到全部程序运行成功为止。
5、请老师检查,向老师演练此程序,并能回答老师提出的相关问题。
三、需求分析。
1、问题背景:哈夫曼树是一类带权路径长度最短的树,将其应用在信息编码中,权值可看作是某个符号出现的频率,出现频率大的字符其编码长度小,从而可缩短整个信息通信过程中的二进制编码长度,达到节省通信资源的目的。
2、 对所开发系统功能的描述:利用哈夫曼编码进行信息通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。本次设计就是一个哈夫曼的编/译码器。
可以将给定的文件编码成二进制文件,并能译码成原文,又能将二进制文件进行压缩,解压缩,并能成功的返回原文。
3、 单链表基本操作系统:单链表基本操作系统系统是运行于windows系统下的应用软件,主要用于对信息进行增、删、等操作,并且还可对使用该系统的用户进行登录名和密码的管理。系统给用户提供了一个简单的人机界面,使用户可以根据提示输入操作项,调用系统提供的管理功能。
四、概要设计。
1.系统结构图(功能模块图)和数据变量说明。
1)功能模块图。
a、哈夫曼。
b、单链表基本操作。
2)数据变量说明。
a、哈夫曼。
struct system
char user[5];/验证身份的用户名*/
char mima[5];/验证身份的密码*/
sys;typedef struct node
char data;/*存放各个字符*/
char code[20];/存储哈夫曼编码*/
int weight; /用来存放各个结点的权值*/
int parent,lchild,rchild; /指向双亲、孩子结点的指针*/
int length;/*存放编码长度*/
hfnode;
typedef struct zipin
char data;/*存放各个字符*/
int count;/*存放各字符的出现频率*/
character;
b、单链表基本操作。
struct system
char user[5];/验证身份的用户名*/
char mima[5];/验证身份的密码*/
sys;typedef struct node
int data节点数据域*/
struct node *next;/*节点指针域*/
} node;
2、 功能模块说明。
a、哈夫曼。
1)字符统计函数:通过读取文件,统计文件中的字符总个数,动态建立存储所有字符的数组。
2)读取函数:读取源文件,将源文件中的字符存入动态建立的数组中。
3)权值统计函数:遍历存储字符的数组,统计每个字符出现的频率,即权值。
4)选取最小,次小值函数:不断遍历数组,根据每个字符出现的频率,每次选出权值最小的和权值次小的。
5)哈夫曼树建立函数:不断调用选取最小,次小值函数,根据哈夫曼算法,建立哈夫曼树。
6)哈夫曼编码函数:通过已经建立的哈夫曼树,从叶子到根结点,求每个叶子结点对应的01**,并逆置,即得到哈夫曼编码,并写入编码文件中。
7)哈夫曼译码函数:通过读取写入文件中的哈夫曼编码,从根结点开始访问,到叶子节点,并将叶子节点的字符写入译码文件中。
8)比较函数:比较原文本文件与解码后的文件是否相同,相同:编解码成功;不同:失败。
9)退出模块: 输入0,可直接退出此程序,结束操作。
b、单链表基本操作系统。
1)密码模块:能够限制用户的登陆。
2)增加模块:能将用户再次输入的数据插入到已存在的文件中。
3)删除模块:能将用户指定条件的数据从文件中删除。
4)保存模块:能将数据保存为文件形式,长期保存。
5)读取模块:能将文件上的数据文件读取出来。
6)主程序模块:完成主菜单的显示,及对各模块的调用。
7)录入模块: 能够录入基本信息。
8)退出模块: 输入0,可直接退出此程序,结束操作。
五、详细设计及运行结果。
哈夫曼编码译码系统主要函数流程图。
1.建立哈夫曼树:(包括最小,次小选取函数)
2.哈夫曼编码函数:
3.哈夫曼译码流程图。
5、打印信息模块。
单链表基本操作系统主要函数流程图。
1.录入信息模块。
2、增加信息模块。
3、 删除信息模块。
4、打印信息模块。
5、逆置信息模块。
二)运行结果。
1)哈夫曼编码译码系统。
原始文档中的内容为“”
1.读取文件。
2.统计字符种类。
字符总类数为:12
3.建立哈夫曼树。
根节点的下标值为:26
4.输出哈夫曼树。
5.输出编码值。
6.译码文件。
d:\\查看文件。
2)单链表基本操作系统。
1.登陆模块。
2.录入模块。
3.增加模块。
4.逆置模块。
5.删除模块。
六、调试情况,设计技巧及体会。
1、调试情况:根据每个函数的功能及先后顺序来一个一个的写相应的函数,每写完一个都要一一调试通过。遇到问题时可以单步调试,可以在有疑问的语句处添加printf语句作为标志,以检验该语句是否有问题。
2、可遵循结构化的程序设计思想来进行本系统的设计——逐步细化,也就是将系统软件设计的任务分成许多容易解决的小任务,即分解出许多子功能模块进行设计。
3、数据保存选择:由于关于给定的原文信息量大,要对其有存储、遍历,采用动态分配空间的形式,尽可能节省空间;同时对于新产生的信息,采取保存至文件的方式来存储数据以节省内存空间,可以达到随用随调的要求,提高运行效率。因此本系统采用动态数组,文件来保存数据。
4、调试心得体会:
1)本次课程设计,事先已确定了准备做的课题,加上之前充分的准备,所以,对于课题的分析比较清楚,将该课题划分成若干小任务,进而转化成若干小程序的设计完成。在书写程序时,需要格外细心,小到要注意标点,语句的拼写,如:将scanf误拼为sacnf;将“;”误写为“:
”在定义结构体时忘加“;”在调试程序时,出现错误,要学会自己分析,自己解决;另外,通过此次实验,暴露了自己在平时学习中的一些问题,更加深了对课本知识的理解,并对所学知识进行了融合,运用,对于形参的传递,尤其是值传递,地址传递的区别;文件的读取,尤其是给链表各节点单元读值,注意循环控制变量的选取;对于指针的使用,及链表的插入,删除,排序操作,其中通过对文件的反复琢磨,加深了文件的认识,并使用了文件就是一个例子。
2)整个实验过程都督促着我必须自觉地看教程。每天晚上都要对第二天的任务有个全面的了解和计划,这样才能在试验中明确自己的目标,以便更有效的完成好当天的任务。同时,不仅要搞懂最基本最实在的基础知识,而且要达到能够熟练掌握和比较其他知识综合应用的目的,并学会在小型程序中运用这些知识。
3)在此次实验中,交流也起到了很大的作用,在遇到比较困难的问题时,几个人一起**,一起研究,共同商订方法,经验的交流,是我们大家都获得了进步和提高。自己的信心,也起到很大的作用,调试虽然出现不少问题,但始终没问老师,同学,坚持自己改,尽管有时挺浪费时间,但当解决所有问题时的喜悦,却真是令人难忘。总之,通过此次实验,我的确学到不少东西,无论是知识,还是经验,收获颇丰。
4)在整个实习中,我深刻体会到老师发挥的重要作用。c语言程序对我们来说比较难,在匆忙的学习中更是难上加难,似乎觉得自己仅是个匆匆过客。但在老师的帮助下我学会了如何调试,如何查找系统没有提示的错误,最后将程序运行出来。
我想没有老师的帮助我很难在短期内把程序设计完成好。同时,在短短的两周时间里,我从老师那里学到了一种处事的态度及思考的方式。这些对我都有很大的帮助。
在此特别感谢指导教师的帮助。
数据结构课程设计报告
东莞理工学院城市学院。题目 二叉排序树 专业 计算机科学与技术 本 年级 2010级计算机科学与技术专业 1 班。个人姓名 何振江。指导教师 张娟老师 时间 2010至2011第二学期第18周 地点 实验楼615机房 东莞理工学院城市学院计算机与信息科学系制。2011年 6月。实习报告的内容。一 问...
数据结构课程设计报告
设计一个校园导游程序,为来访的客人提供信息查询服务。1 设计学校的校园平面图。选取若干个有代表性的景点抽象成一个无向带权图 无向网 以图中顶点表示校内各景点,边上的权值表示两景点之间的距离。2 存放景点代号 名称 简介等信息供用户查询。3 为来访客人提供图中任意景点相关信息的查询。4 为来访客人提供...
数据结构课程设计报告
河北科技大学。课程设计报告。学生姓名学号。专业班级。课程名称数据结构。学年学期 2 012 2 013学年第 2 学期指导教师 黄春茹。2 0 13年 6 月。课程设计成绩评定表。一 数据结构课程设计目标。二 问题描述。三 需求分析。四 概要设计。五 详细设计。六 软件说明书 给出软件如何使用,使用...