数据结构课程设计报告

发布 2022-10-05 03:05:28 阅读 6303

课程设计题目:哈夫曼树的应用及单链表的基本操作。

一、课程设计目的。

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 月。课程设计成绩评定表。一 数据结构课程设计目标。二 问题描述。三 需求分析。四 概要设计。五 详细设计。六 软件说明书 给出软件如何使用,使用...