哈夫曼树课程设计

合集下载

电报哈夫曼树课程设计

电报哈夫曼树课程设计

电报哈夫曼树课程设计一、课程目标知识目标:1. 学生能理解哈夫曼树的定义及其在数据压缩中的应用。

2. 学生能掌握哈夫曼编码的构建过程,并运用其进行基本的编码和解码操作。

3. 学生能了解哈夫曼树的基本性质,如最优二叉树、路径长度最短等。

技能目标:1. 学生能够运用所学知识解决实际问题,如使用哈夫曼编码进行文件压缩和解压缩。

2. 学生通过实际操作,培养解决问题的能力,提高逻辑思维能力。

3. 学生能够运用数学方法,对哈夫曼树进行证明和分析。

情感态度价值观目标:1. 学生培养对数据结构和算法的兴趣,认识到其在实际生活中的重要性。

2. 学生通过合作学习,培养团队协作精神,提高沟通与表达能力。

3. 学生在学习过程中,培养面对困难勇于挑战的精神,增强自信心。

课程性质:本课程为信息技术或计算机科学相关学科的课程,旨在通过哈夫曼树的学习,让学生掌握数据压缩的基本原理和方法。

学生特点:考虑到学生所在年级的特点,课程设计将结合具体实例,由浅入深地进行教学,使学生易于理解和掌握。

教学要求:教学过程中,注重理论与实践相结合,强调学生的实际操作能力。

同时,注重培养学生的逻辑思维能力和团队协作能力,提高学生的综合素质。

通过分解课程目标,为后续教学设计和评估提供明确的方向。

二、教学内容1. 引入:介绍数据压缩的概念及其在生活中的应用,引导学生思考数据压缩的必要性。

2. 哈夫曼树基本概念:讲解哈夫曼树的定义、性质和应用场景,使学生了解哈夫曼树在数据压缩中的重要性。

- 理解哈夫曼树的构建过程- 掌握哈夫曼树的路径长度和最优二叉树的概念3. 哈夫曼编码:详细讲解哈夫曼编码的构建方法,以及如何利用哈夫曼编码进行数据压缩和解压缩。

- 学习哈夫曼编码的构建步骤- 实践哈夫曼编码的应用案例4. 哈夫曼树的分析与证明:分析哈夫曼树的基本性质,并对最优二叉树进行数学证明。

- 掌握哈夫曼树的数学证明方法- 理解哈夫曼树在数据压缩中的优势5. 实践操作:结合教材实例,让学生动手实践,加深对哈夫曼树及其编码方法的理解。

哈夫曼树课程设计报告

哈夫曼树课程设计报告

数据结构课程设计报告设计题目:哈夫曼树应用专业:软件工程班级:软件学生:学号:指导教师:罗作民 / 张翔起止时间:2011-07-04—2011-07-082011 年春季学期目录一.具体任务 (2)1功能 (2)2分步实施………………………………………………………………………...2.3要求 (2)二.哈夫曼编码 (2)1问题描述 (2)2.基本要求 (3)3实现提示 (3)三.设计流程图 (4)1建立哈夫曼树 (4)2编码 (5)3译码 (6)4主程序 (7)四.设计概要 (8)1问题哈夫曼的定义....................................................................................... .......8..2所实现的功能函数如下 (8)3功能模块 (8)五.源程序 (9)六.调试分析 (15)七.心得与体会 (18)八.参考文献 (18)一、任务题目:哈夫曼树应用1.功能:1.从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树并将它存于文件hfmTree中.将已在内存中的哈夫曼树以直观的方式(比如树)显示在终端上;2.利用已经建好的哈夫曼树(如不在内存,则从文件htmTree中读入),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中,并输出结果,将文件CodeFile以紧凑格式先是在终端上,每行50个代码。

同时将此字符形式的编码文件写入文件CodePrint中。

3.利用已建好的哈夫曼树将文件CodeFile中的代码进行译码,结果存入文件TextFile中,并输出结果。

2.分步实施:1)初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;2)完成最低要求:完成功能1;3)进一步要求:完成功能2和3。

有兴趣的同学可以自己扩充系统功能。

3.要求:1)界面友好,函数功能要划分好2)总体设计应画一流程图3)程序要加必要的注释4)要提供程序测试方案5)程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。

matlab课程设计哈夫曼树

matlab课程设计哈夫曼树

matlab课程设计哈夫曼树一、教学目标本节课的学习目标包括知识目标、技能目标和情感态度价值观目标。

知识目标要求学生掌握哈夫曼编码的基本原理和方法,了解哈夫曼树的结构和性质。

技能目标要求学生能够运用MATLAB软件构建哈夫曼树,并实现字符编码。

情感态度价值观目标培养学生对信息编码技术的兴趣,提高学生的问题解决能力和创新意识。

二、教学内容本节课的教学内容主要包括哈夫曼编码的基本原理、哈夫曼树的结构和性质,以及MATLAB软件在哈夫曼编码中的应用。

首先,介绍哈夫曼编码的原理和方法,让学生了解编码的基本概念。

然后,通过讲解和示例,引导学生理解哈夫曼树的结构和性质。

最后,利用MATLAB软件,让学生动手实践构建哈夫曼树,并实现字符编码。

三、教学方法为了激发学生的学习兴趣和主动性,本节课采用多种教学方法。

首先,通过讲授法,向学生传授哈夫曼编码的基本原理和方法。

其次,利用讨论法,让学生分组讨论哈夫曼树的性质,促进学生之间的交流和合作。

再次,运用案例分析法,通过分析实际案例,让学生更好地理解哈夫曼编码的应用。

最后,采用实验法,让学生亲自动手操作MATLAB软件,构建哈夫曼树并实现字符编码。

四、教学资源为了支持教学内容和教学方法的实施,本节课准备了一系列教学资源。

教材《数据结构与算法》提供了关于哈夫曼编码的基本原理和算法的介绍。

参考书《MATLAB编程与应用》为学生提供了MATLAB软件的使用方法和实例。

多媒体资料包括PPT课件和视频教程,用于辅助讲解和演示。

实验设备包括计算机和MATLAB软件,为学生提供动手实践的机会。

这些教学资源将丰富学生的学习体验,帮助学生更好地理解和掌握哈夫曼编码技术和MATLAB软件的应用。

五、教学评估本节课的评估方式包括平时表现、作业和考试。

平时表现通过课堂参与、提问和小组讨论等方式评估。

作业包括编程练习和理论题目,以检验学生对哈夫曼编码和MATLAB应用的理解。

考试则全面考察学生对课程内容的掌握,包括理论知识和实践操作。

数据结构课程设计_哈夫曼树

数据结构课程设计_哈夫曼树

数据结构课程设计_哈夫曼树哈夫曼树是数据结构课程设计中的一个重要内容,它是一种用于编码和压缩数据的树形结构。

在这篇文章中,我们将深入探讨哈夫曼树的原理、应用以及实现方法。

一、哈夫曼树的原理哈夫曼树是一种特殊的二叉树,它的构建依赖于哈夫曼编码的思想。

哈夫曼编码是一种变长编码方式,通过将频率较高的字符用较短的编码表示,而频率较低的字符用较长的编码表示,从而实现数据的高效压缩。

构建哈夫曼树的过程如下:1. 首先,将待编码的字符按照出现频率从小到大进行排序。

2. 然后,取出频率最小的两个字符,将它们作为叶子节点构建一个新的二叉树,该树的根节点的权值为这两个字符的频率之和。

3. 将新构建的二叉树插入到原有的字符列表中,并重新进行排序。

4. 重复步骤2和步骤3,直到只剩下一个根节点的二叉树为止,该树就是哈夫曼树。

二、哈夫曼树的应用哈夫曼树在数据压缩和编码中有着广泛的应用。

由于哈夫曼编码能够将频率较高的字符用较短的编码表示,从而减少了数据的存储空间,因此在文件压缩、图像压缩等领域被广泛应用。

在文件压缩中,哈夫曼树可以根据文件中字符的出现频率构建出一个最优的编码表,将文件中的字符替换为对应的哈夫曼编码,从而实现文件的高效压缩。

解压缩时,只需要根据哈夫曼编码表将编码还原为原始字符,即可恢复文件的原始内容。

在图像压缩中,哈夫曼树可以根据图像中像素值的出现频率构建出一个最优的编码表,将像素值替换为对应的哈夫曼编码,从而实现图像的高效压缩。

解压缩时,只需要根据哈夫曼编码表将编码还原为原始像素值,即可恢复图像的原始内容。

三、哈夫曼树的实现方法哈夫曼树的实现方法有多种,其中一种常见的方法是使用优先队列(也称为最小堆)来实现。

优先队列是一种特殊的队列,它的每个元素都有一个优先级,优先级高的元素先出队。

在构建哈夫曼树时,我们可以将字符和对应的频率作为优先队列中的元素,根据频率的大小来确定优先级。

每次从优先队列中取出两个频率最小的字符,将它们作为叶子节点构建一个新的二叉树,并将该二叉树的根节点插入到优先队列中。

哈夫曼树课程设计报告(DOC)

哈夫曼树课程设计报告(DOC)

课程设计题目:哈夫曼编码器院系:专业班级:学号:学生姓名:指导教师:2014年1月2日课程设计需求分析报告一、分析问题和确定解决方案1.分析问题利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。

但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。

对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统,为这样的信息收发站写一个哈夫曼的编/译码系统。

2.确定解决方案设计建立带权的哈夫曼树,确定哈夫曼树的类与成员函数,以及各函数之间的调用关系,采用动态数组的存储结构存储所需要的数据,通过不同的函数来实现编码,译码以及打印二进制编码、哈夫曼树,把不同的数据存入不同的txt文件中,通过主函数调用来实现功能检测。

3.输入的形式和输入值的范围手动或者从文本中读入数据的形式初始化哈夫曼树,从键盘中或者文件中读入数据,以字母A-Z代表结点,以自然数代表权值,字符串提示使用者所要执行的操作。

4.输出的形式在显示器界面上或者以文本的形式来实现程序调试的输出。

5.程序所能达到的功能(1)初始化。

手动输入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件WritehfmTree中,输出哈夫曼树及各字符对应的编码存于WritehfmCode;从文本中读入字符,建立哈夫曼树存于ReadhfmTree, 输出哈夫曼树及各字符对应的编码存于ReadhfmCode.(2)编码。

手动输入一串大写英文字符,该字符存于WriteToBeTron中,对字符进行编码并将它存于WriteCodeFile中;从文件中读取字符编码并存于ReadCodeFile中。

(3)印代码文件。

将文件ReadCodeFile以紧凑格式显示在终端上,每行50个代码。

同时将此字符形式的代码码写入文件CodePrint中。

(4)印哈夫曼树。

将初始化的哈夫曼树以直观的方式显示在终端上,同时将此字符形式的哈夫曼树写入文件TreePrint中。

哈夫曼树课程设计报告c语言

哈夫曼树课程设计报告c语言

哈夫曼树课程设计报告c语言哈夫曼树是广泛应用于数据压缩和编码的一种数据结构。

在计算机科学中,哈夫曼编码是一种无损的压缩算法,它基于使用较少的位数来表示频繁出现的字符,从而达到节省空间的目的。

本篇文章将围绕哈夫曼树的课程设计报告进行阐述,帮助读者更加深入地理解和应用哈夫曼树。

首先,我们需要了解哈夫曼树的基本概念和算法。

哈夫曼树是一种二叉树,它的每个节点都表示一个字符和它出现的频率。

哈夫曼树的算法主要是通过构建最小权重树来实现,即将输入的字符按照出现的频率进行排序,然后选择出现频率最小的两个字符,将它们合并成一个节点。

这个新节点的权重就是两个字符的权重之和。

继续将这个新节点与下一个最小频率字符继续合并,直到所有字符合并成一个节点。

最终形成的二叉树就是哈夫曼树。

接下来,我们需要学习如何在C语言中实现哈夫曼树。

在实现过程中,我们需要定义一个结构体来表示哈夫曼树节点。

这个结构体包含两个成员:字符和出现的频率。

同时,我们需要定义一个优先队列来存储字符节点和它们的权重。

在优先队列中,我们需要实现一些基本操作,比如插入、删除和取出队首元素等等。

通过这些操作,我们就可以按照字符频率构建出哈夫曼树。

最后,我们需要实现哈夫曼编码的功能。

在哈夫曼编码中,我们需要定义一个数组来存储每个字符的编码。

这个数组的索引是字符的ASCII码,它的值是该字符的哈夫曼编码。

在对输入字符串进行编码时,我们从哈夫曼树的根节点开始,按照左右子树的方向进行编码。

当遇到叶子节点时,我们就将编码添加到输出字符串中。

最终,我们就可以完成对字符串的压缩和解压。

综上所述,哈夫曼树是一种非常有用的数据结构,它在数据压缩和加密领域都有广泛的应用。

通过本篇文章的介绍,希望读者们能够更加深入地理解哈夫曼树的基本概念和实现方法。

在学习过程中,读者们也可以尝试自己动手实现哈夫曼树,并应用到实际的项目中,提高自己的编程能力。

哈夫曼树的课程设计报告

哈夫曼树的课程设计报告

数据结构与算法课程设计报告书题目:哈夫曼编码/译码器班级:学号:1109121105姓名:田欢指导教师:龚丹周期:2011-12-19至2011-12-23成绩:年月日一、课程设计的目的与要求(一)课程设计目的与任务(参考已发文档自行编辑,但不少于100字)设计一个利用哈夫曼算法的编码和译码系统,重复地显示并处理以下项目,直到选择退出为止。

利用哈夫曼树编码问题基本原理的应用,撑握对树的不同存储结构的定义和算法描述。

学会构造哈夫曼树和哈夫曼编码等主要算法。

(二)题目要求1) 将权值数据存放在数据文件(文件名为data.txt,位于执行程序的当前目录中)2) 分别采用动态和静态存储结构3) 初始化:键盘输入字符集大小n、n个字符和n个权值,建立哈夫曼树;4) 编码:利用建好的哈夫曼树生成哈夫曼编码;5) 输出编码;6) 设字符集及频度如下表:字符空格A B C D E F G H I J K L M频度186 64 13 22 32 103 21 15 47 57 1 5 32 20字符N O P Q R S T U V W X Y Z频度57 63 15 1 48 51 80 23 8 18 1 16 1二、设计正文1 系统分析(1)定义一个变量名为HTNode的结构体,用该结构体中的char data、int weight、int parent、int lchild、int rchild分别表示哈夫曼树中每个结点的权值、权重、双亲结点、左孩子、右孩子,再定义一个HTNode类型的数组ht[30]存放哈夫曼树;另外定义一个变量名为HCode的结构体,采用HCode类型变量的cd[start]~cd[n]存放当前结点的哈夫曼编码、最后定义一个HCode类型的数组hcd[30]的数组用于存放当前叶子结点ht[i]的哈夫曼编码。

(2)编写CodeInput(n,ht)函数并在函数中设置一个for(i=0;n;++)循环,首先输入n个字符,再利用函数中的for(i=0;<n;++)循环实现对这n个字符的权值的输入。

课程设计(哈夫曼树)

课程设计(哈夫曼树)

计算机学院信息管理与信息系统专业数据结构课程设计题目:哈夫曼树的应用班级:姓名:学号:同组人姓名:起迄日期:课程设计地点:指导教师:完成日期:目录1、设计目的 (3)2、需求分析 (3)2.1选题的意义及背景 (3)2.2输入/输出形式和输出值的范围 (4)3、概要设计 (4)3.1设计思想 (4)3.2函数间的关系 (4)4、详细设计 (4)4.1哈夫曼的主要结构 (4)4.1.1结构定义 (4)4.1.2主要函数声明及功能描述 (5)4.2源程序 (6)4.2.1头文件 (6)4.2.2源文件 (7)5、程序测试结果 (15)6、总结 (16)7、参考文献 (16)1.设计目的数据结构作为一门学科主要研究数据的各种逻辑结构和存储结构,以及对数据的各种操作。

因此,主要有三个方面的内容:数据的逻辑结构;数据的物理存储结构;对数据的操作(或算法)。

通常,算法的设计取决于数据的逻辑结构,算法的实现取决于数据的物理存储结构。

数据结构是信息的一种组织方式,其目的是为了提高算法的效率,它通常与一组算法的集合相对应,通过这组算法集合可以对数据结构中的数据进行某种操作。

在当今信息时代,信息技术己成为当代知识经济的核心技术。

我们时刻都在和数据打交道。

比如人们在外出工作时找最短路径,在银行查询存款、通过互联网查新闻、以及远程教育报名等,所有这些都在与数据发生关系。

实际上,现实世界中的实体经过抽象以后,就可以成为计算机上所处理的数据。

数据结构课程主要是研究非数值计算的程序设计问题中所出现的计算机操作对象以及它们之间的关系和操作的学科。

数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。

学习数据结构是为了将实际问题中所涉及的对象在计算机中表示出来并对它们进行处理。

通过课程设计可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。

数据结构课程设计-哈夫曼树

数据结构课程设计-哈夫曼树

嘉应学院计算机学院实验报告课程名称:数据结构课程设计开课学期:2017-2018学年第2学期班级:指导老师:实验题目:哈夫曼树学号:姓名:上机时间:一、实验目的本实验的目的是通过对简单的哈夫曼编/译码系统的设计与实现来熟练掌握树形结构在实际问题中的应用。

二、实验问题描述利用哈夫曼编码进行通信可以大大提高通信利用率,缩短信息传输时间,降低传输成本。

但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码,此试验即设计这样的一个简单的编/译码系统。

系统应该具备如下的几个功能。

1、求出各个叶子节点的权重值输入一个字符串,统计其中各个字母的个数和总的字母个数。

2、构造哈夫曼树统计出的字母种类为叶子结点个数,每个字母个数为相应的权值,建立哈夫曼树。

3、打印哈弗曼树的功能模块按照一定形式打印出哈夫曼树。

4、编码利用已经建立好的哈夫曼树进行编码。

5、译码根据编码规则对输入的代码进行翻译并将译码。

三、实验步骤1、实验问题分析(1)设计一个结构体数组保存字母的类型和个数。

{; 字母的种类; 字母的个数};(2)在构造哈夫曼树时,设计一个结构体数组保存哈夫曼树中各结点的信息,根据二叉树的性质可知,具有n个结点的哈夫曼树共有21个结点,所以数组大小设置为21,描述结点的数据类型为:{; 权值; 双亲; 左孩子; 右孩子};[]; 定义此类型的数组(3)求哈夫曼编码,实质上是在已经建立的哈夫曼树中,从叶子结点开始,沿着结点的双亲链表域退回到根节点,每退回一步,就走过了哈夫曼树的一个分支,从而得到一位哈夫曼值,由于一个字符的哈夫曼编码是从根结点所经过的路径上各分支所组成的0、1序列,因此先得到的分支代码为所求编码的低位码,后得到的分支代码为所求编码的高位码,所以设计如下的数据类型:10;{[]; 每个结点的哈夫曼编码; 开始位置};(4)设置全局变量。

s; 为输入的字符串0; 记录输入的字符串中字母的种类,即叶子结点个数0; 记录字符串中字母的总个数[]叶子结点类型2、功能(函数)设计(1)统计字母种类和个数模块此模块的功能为从键盘接受一个字符串,统计字符串中字母种类即结点个数,每种字母出现次数即各叶子结点的权值。

数据结构 哈夫曼树课设

数据结构 哈夫曼树课设

3、哈夫曼编码/译码系统(树应用)在本例中的主要算法有三个:(1)哈夫曼树的建立;(2)哈夫曼编码的生成;(3)对编码信息的翻译。

一. 需求分析1..结构类型定义和链表的结点类型typedef struct //定义新数据类型即节点结构{ int weight; //权重域int parent,lchild,rchild; //指针域}htnode; //节点类型标示符htnode ht[maxnodenumber];//定义三叉链表存储数组typedef struct //定义保存一个叶子节点哈弗曼编码的结构{ int bit[maxbit];//定义一维数组编码域int start; //定义位置域}hcnodetype; //定义编码类型2. 函数htnode *creatstree(int n) ;//创建哈夫曼树void getstree(htnode *ht,int n) //哈弗曼编码算法及打印函数二.算法分析及算法(1).建立哈夫曼树的算法1. 定义各节点类型其中应包含两类数据权重域weight;指针域(lchild、rdhild和parent)2. 用静态三叉链表来实现叶子节点来构造新的根节点, 构造中只考虑叶子节点的权重, 不用考虑其数值域; 并且在链表中从叶子开始存放,然后不断的将两颗最小权值的子树合并为一颗权值为其和的较大的子树,逐步生成各自内部节点直到树根。

f or(j=0;j<n+i;j++)//循环找出最小权值和位置if(ht[j].parent==-1&&ht[j].weight<m1){ m2=m1; k2=k1;m1=ht[j].weight; k1=j; }else{ if(ht[j].parent==-1&&ht[j].weight<m2){ m2=ht[j].weight; k2=j;} }ht[k1].parent=n+i; //修改最小权值节点的双亲为刚生成的新节点ht[k2].parent=n+i; //修改次小权值节点的双亲为刚生成的新节点ht[n+i].weight=ht[k1].weight+ht[k2].weight;//将新生成的权重值填入新的根节点ht[n+i].lchild=k1; //新生节点左孩子指向k1ht[n+i].rchild=k2; //新生节点右孩子指向k2(2).哈夫曼编码的算法1. 编码将建立的哈夫曼树从每个叶子节点开始沿着双亲域回到根节点,每走一步进行编码得到一位编码值;2. 译码每个叶子节点的哈夫曼编码是从根节点到相应的叶子的路径的各个分支的代码组成的0和1序列,所以先得到了低位编码后得到高位编码因此可用一维数组从后向前来存放各位编码值,并用start来记录编码的起始位置。

哈夫曼树课程教学设计

哈夫曼树课程教学设计

,.
2.课程设计任务与要求:
任务 . 哈夫曼树应用
功能: (1) 从终端读入字符集大小 n,以及 n 个字符和 n 个权值,建立哈夫曼树并将它存于文件 hfmTree 中.将已在内
的哈夫曼树 以直观的方式(比如树)显示在终端上; (2) 利用已经建好的哈夫曼树(如不在内存,则从文件 htmTree 中读入),对文件 ToBeTran 中的正文进行编码 后将结果存 入文件 Cod eFile 中,并输出结果,将文件 CodeFile 以紧凑格式先是在终端上,每行 50 个代码。同时将此 形式的 编码文件写入文件 CodePrint 中。 (3) 利用已建好的哈夫曼树将文件 CodeFile 中的代码进行译码,结果存入文件 TextFile 中,并输出结果。 分步实施:
3 求哈夫曼树的编码 nvalue 是结点值数组,w 是权值数组 n 是叶子结点的个数 void huffmanTree::code(char nvalue[],int w[],int n)
4 哈夫曼译码 nvalue 为结点值数组 hfmcode 为哈夫曼编码,n 个叶子结点 void huffmanTree::decode(char nvalue[],char hfmcode[],int n)
,.

二 概要设计
程序流程图
,.
图1
,.
三 详细设计 1、哈夫曼树结点结构定义
struct hfmnode {
char nValue;//节点值 int weight;//权值 int pnIndex;//父结点下标 int lchildIndex,rchildIndex;//左右孩子的结点下标 };
,.
2、主要函数及相关功能
1 在数组 hfmNode 中从 O 开始到 pos 位置,查找哈夫曼树外的权值最小的两个结点的位置 void huffmanTree::select(int pos,int &nodeOne,int &nodeTwo)

哈夫曼树编码课程设计实验报告

哈夫曼树编码课程设计实验报告

四、综合设计(课程设计)摘要:在这次课程设计中,所进行的实验是:哈夫曼编码和编译器。

对哈夫曼树进行建立,由节点的权值建立最小二叉树,哈夫曼树haftree,并由所建立的哈夫曼树进行编码,求出各个节点的编码。

在由所求的哈夫曼树,输入一段二进制电文,能够输出那所建立的哈夫曼树中的节点。

建立的haftree用图形化表示出来。

在整个代码实现中,窗体的实现,功能的完善,哈夫曼树的建立,哈夫曼树的编码,遇到了许多难题,haftree对象数组的分配空间,节点的属性等都比较困难。

在整个过程中,用的是C#语言,包的应用,字符串数组的空间分配,在计算每个字符的权值时,用的是sizeOf()检索整个字符串,计算字符的权值,建立字符出现频度的表格,根据表格中每个字符频度建立起哈夫曼树。

从根节点出发检索每个节点的左右孩子,如果是左孩子遍历左边,路径为0,然后左孩子为根节点;如果是右孩子,遍历右孩子,路径为1,然后右孩子为根节点。

在重新上述方法,直到所有的节点都遍历完,每个节点的编码就确定后输出来。

在译码过程中,由所输入的二进制电文,根据所建立的哈夫曼树,如果是0走左边,如果是1,走右边,直到节点的左右孩子为空时,输出给节点的信息,在回到根节点重新遍历后面的二进制电文,直到所有电文都遍历完为止,输出所有从电文中译码出来的信息。

关键词:编译器;频度;译码五、综合设计(课程设计)Abstract:In this design, the experiment was : Huffman coding and compiler. The Huffman tree to establish, by the node weights to establish a minimum of two fork tree, Huffman tree haftree, and by the Huffman tree coding, and every node coding. By the Huffman tree, enter a binary message, can output the set up by the Huffman tree nodes. Establishment of haftree graphical representation. In the implementation of the code, the realization form, function perfect, Huffman tree is established, Huffman coding tree, encountered a lot of problems, an array of haftree objects allocated space, node attributes are difficult. Throughout the process, using the C# language, the application package, an array of strings in the spatial distribution, calculated for each weight of characters, using sizeOf to retrieve the entire string, calculating the weight of characters, establish character appearance frequency of form, form the basis of each character frequency established Huffman tree. Starting from the root node to retrieve each node around children, if children left traverse left, path 0, then left the child as the root node; if it is right child, traversing the right path for children, 1 children for the root node, then the right. In the new method described above, until all of the node traversal finished, each node is determined after the output coding.In the decoding process, by the input binary message, according to the established Huffman tree, if it is 0 the left, if it is 1, go right, until the left and right child node is empty, the output to the node information, in the back of the root node to traverse behind a binary message, until all message traversal finished so far, the output from all the message decoding of information.Keywords:compiler;frequency;decoding目录摘要 ................................................................................. 错误!未定义书签。

哈夫曼树的课程设计

哈夫曼树的课程设计

哈夫曼树的课程设计一、课程目标知识目标:1. 理解哈夫曼树的基本概念、性质与应用;2. 学会构建哈夫曼树及计算哈夫曼编码;3. 掌握哈夫曼树在实际问题中的应用。

技能目标:1. 能够运用哈夫曼树解决数据压缩问题;2. 能够运用编程实现哈夫曼树的构建及编码;3. 能够运用哈夫曼树优化算法,提高问题解决效率。

情感态度价值观目标:1. 培养学生主动探究、积极思考的学习态度;2. 培养学生团队协作、共同解决问题的合作精神;3. 增强学生对数据结构与算法在实际应用中的价值认识。

本课程针对高中年级学生,结合学科特点,注重理论与实践相结合。

在教学过程中,充分考虑学生的认知水平、兴趣和需求,以实际问题为引导,激发学生的学习兴趣。

通过本课程的学习,使学生能够掌握哈夫曼树的相关知识,提高编程能力和问题解决能力,同时培养学生的团队协作精神和价值观。

课程目标具体、可衡量,便于教学设计和评估。

二、教学内容1. 哈夫曼树基本概念:介绍哈夫曼树的定义、性质以及相关术语,如路径长度、权值等;2. 哈夫曼树的构建:讲解哈夫曼树的构建过程,包括贪心算法的应用;3. 哈夫曼编码:介绍哈夫曼编码的原理,学会计算哈夫曼编码;4. 哈夫曼树在实际问题中的应用:分析哈夫曼树在数据压缩、图像处理等领域的应用;5. 编程实践:结合教材内容,运用编程语言实现哈夫曼树的构建、哈夫曼编码及数据压缩;6. 案例分析:选取典型实例,分析哈夫曼树优化算法在解决问题中的作用。

教学内容按照以下进度安排:1. 第一周:哈夫曼树基本概念及性质;2. 第二周:哈夫曼树的构建方法;3. 第三周:哈夫曼编码的计算方法;4. 第四周:哈夫曼树在实际问题中的应用;5. 第五周:编程实践及案例分析。

教学内容与教材紧密关联,注重科学性和系统性,旨在帮助学生掌握哈夫曼树的相关知识,提高实际应用能力。

三、教学方法本课程采用以下多样化的教学方法,以激发学生的学习兴趣和主动性:1. 讲授法:教师通过生动的语言、形象的表达,讲解哈夫曼树的基本概念、性质和构建方法,使学生对知识点有系统的认识。

c哈夫曼树课程设计

c哈夫曼树课程设计

c哈夫曼树课程设计一、课程目标知识目标:1. 学生能够理解哈夫曼树的基本概念,掌握哈夫曼编码的构建方法。

2. 学生能够运用哈夫曼树解决数据压缩问题,理解哈夫曼树在实际应用中的优势。

3. 学生了解哈夫曼树与其他树结构(如二叉树、堆等)的区别与联系。

技能目标:1. 学生能够独立构建哈夫曼树,并编写相应的哈夫曼编码和解码算法。

2. 学生能够分析哈夫曼树的效率,评估其在不同场景下的性能。

3. 学生具备运用哈夫曼树解决实际问题的能力,提高编程实践能力。

情感态度价值观目标:1. 学生通过学习哈夫曼树,培养对数据结构与算法的兴趣,激发探究精神。

2. 学生在小组合作中学会沟通、协作,培养团队意识和集体荣誉感。

3. 学生认识到哈夫曼树在信息领域的重要性,增强对信息技术的热爱和责任感。

本课程针对高中年级学生,结合学生特点和教学要求,注重理论与实践相结合,通过实例分析、动手实践和小组讨论等方式,使学生在掌握哈夫曼树相关知识的基础上,提高编程能力和解决实际问题的能力。

同时,课程注重培养学生的情感态度价值观,激发学生的学习兴趣,提升其信息技术素养。

二、教学内容1. 哈夫曼树基本概念:介绍哈夫曼树的定义、性质与应用场景,通过实例让学生理解哈夫曼树在数据压缩中的作用。

教材章节:第三章 数据结构与算法,第5节 哈夫曼树。

2. 哈夫曼编码构建方法:讲解哈夫曼编码的构建过程,包括贪心算法的应用,使学生掌握哈夫曼编码的生成方法。

教材章节:第三章 数据结构与算法,第5节 哈夫曼树。

3. 哈夫曼树编程实践:引导学生利用所学的哈夫曼树知识,编写哈夫曼编码和解码的算法,并进行调试优化。

教材章节:第三章 数据结构与算法,第5节 哈夫曼树;第四章 算法设计与分析,第2节 贪心算法。

4. 哈夫曼树性能分析:分析哈夫曼树的时空复杂度,比较不同场景下哈夫曼树与其他数据结构的性能优劣。

教材章节:第三章 数据结构与算法,第5节 哈夫曼树;第六章 数据结构的应用,第2节 数据压缩。

数据结构课程设计 哈夫曼树

数据结构课程设计 哈夫曼树

学号:2*********课程设计题目哈夫曼树的应用教学院计算机学院专业计算机科学与技术班级*****姓名****指导教师冯珊2012 年06 月日课程设计任务书2011~2012学年第 2学期学生姓名:****专业班级:**********指导教师:*** 工作部门:计算机学院一、课程设计题目:哈夫曼树的应用二、课程设计内容(含技术指标)1.从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树并将它存于文件hfmTree中.将已在内存中的哈夫曼树以直观的方式(比如树)显示在终端上;2.利用已经建好的哈夫曼树(如不在内存,则从文件htmTree中读入),对文件Text.txt 中的正文进行编码,然后将结果存入文件Code.txt中。

3.利用已建好的哈夫曼树将文件Code.txt中的代码进行译码,结果存入文件Text.txt 中,并输出结果。

三、进度安排2012年6月11日设计动员,布置任务2012年6月12日~2012年6月13日,查阅资料,分析、讨论与设计2012年6月14日~2011年6月19日,编写程序,进行调试2012年6月20日~2011年6月21日,完成模块联调,进行测试2012年6月22日,成果验收,完成设计报告、答辩四、基本要求1.分析问题,给出数学模型,选择数据结构。

2.设计算法,给出算法描述,给出源程序清单。

3.编辑、编译、调试源程序,撰写课程设计报告。

4.界面友好,函数功能要划分好5.总体设计应画一流程图6.程序要加必要的注释7.要提供程序测试方案8.程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。

目录摘要 (3)一概述 (4)1.课程设计的目的 (4)2.课程设计的要求 (4)3.哈夫曼算法的实现 (4)二总体方案设计 (5)1.整体的设计思路 (5)2.算法的整体思路 (5)3.工作内容 (5)4.关键问题 (6)三详细设计 (7)1.总体设计流程图 (7)2.建立哈夫曼树 (7)3.编码功能 (8)4.译码功能 (8)四程序的调试与运行结果说明 (9)五课程设计总结 (12)程序部分代码 (13)参考文献 (16)摘要随着计算机的普遍应用与日益发展,其应用早已不局限于简单的数值运算,而涉及到问题的分析、数据结构框架的设计以及设计最短路线等复杂的非数值处理和操作。

数据结构课程设计_哈夫曼树

数据结构课程设计_哈夫曼树

数据结构课程设计_哈夫曼树一、引言哈夫曼树是一种重要的数据结构,广泛应用于编码和解码过程中。

本文将详细介绍哈夫曼树的概念、构建方法以及相关算法。

二、概述哈夫曼树,又称最优二叉树,是一种用于编码的树形结构。

它的特点是:权值越大的节点离根节点越近,权值越小的节点离根节点越远。

通过构建哈夫曼树,可以实现高效的编码和解码过程。

三、构建哈夫曼树的步骤1. 统计字符出现频率:对于给定的文本,首先需要统计每个字符出现的频率。

可以通过遍历文本,使用哈希表或数组记录每个字符出现的次数。

2. 构建哈夫曼树的节点:根据字符频率,创建对应的哈夫曼树节点。

每个节点包含字符和对应的频率。

3. 构建哈夫曼树:通过以下步骤构建哈夫曼树:a. 将所有节点按照频率从小到大排序。

b. 取出频率最小的两个节点作为左右子节点,生成一个新的父节点,父节点的频率为左右子节点频率之和。

c. 将新生成的父节点插入到节点集合中,并移除原来的两个子节点。

d. 重复步骤a-c,直到只剩下一个节点,即为哈夫曼树的根节点。

4. 哈夫曼编码:通过遍历哈夫曼树的路径,给每个字符生成对应的编码。

左子树路径标记为0,右子树路径标记为1。

将所有字符的编码存储在编码表中。

5. 哈夫曼解码:根据编码表和编码后的文本,通过遍历哈夫曼树,将编码转换为原始文本。

四、示例假设有一段文本:"Hello, World!",统计字符频率如下:H: 1e: 1l: 3o: 2,: 1(space): 1W: 1r: 1d: 1!: 1按照步骤三构建哈夫曼树:1. 创建节点集合:[H:1, e:1, l:3, o:2, ,:1, W:1, r:1, d:1, !:1]2. 构建哈夫曼树:a. 排序节点集合:[,:1, W:1, r:1, d:1, !:1, H:1, e:1, o:2, l:3]b. 取出频率最小的两个节点:[, W]c. 生成新的父节点:[:2]d. 插入父节点,并移除子节点:[:2, r:1, d:1]e. 重复上述步骤,直到只剩下一个节点:[:2, r:1, d:1, !:1, H:1, e:1, o:2, l:3]f. 最终得到哈夫曼树的根节点:[:10]根据哈夫曼树生成的编码表如下:H: 000e: 001l: 01o: 10,: 110(space): 1110W: 1111r: 1100d: 1101!: 11100编码后的文本为:"00101 1111 01 10 110 1110 1111 1100 1101 11100"。

c语言哈夫曼课程设计

c语言哈夫曼课程设计

c语言哈夫曼课程设计一、课程目标知识目标:1. 理解哈夫曼编码的基本原理,掌握哈夫曼树的结构特点及其构建方法;2. 学会运用C语言实现哈夫曼编码和解码过程;3. 了解哈夫曼编码在数据压缩中的应用及其优势。

技能目标:1. 能够运用所学知识,独立编写C语言程序构建哈夫曼树并进行编码和解码;2. 培养学生运用算法解决问题的能力,提高编程实践技能;3. 提高学生的逻辑思维能力和分析解决问题的能力。

情感态度价值观目标:1. 激发学生对计算机科学和信息技术的兴趣,培养良好的学习习惯;2. 培养学生的团队合作意识,提高沟通协作能力;3. 培养学生面对问题勇于探索、积极进取的精神。

本课程针对高中年级学生,结合C语言学科特点,充分考虑学生的认知水平、兴趣和实际需求,设计具有实用性、挑战性和趣味性的课程内容。

课程旨在帮助学生掌握哈夫曼编码的核心知识,提高编程实践能力,培养良好的学习态度和价值观,为后续计算机科学学习奠定基础。

通过本课程的学习,学生将能够独立完成哈夫曼编码相关程序的设计与实现,并在实际应用中发挥其优势。

二、教学内容1. 哈夫曼编码基本原理:介绍哈夫曼编码的概念、原理及其在数据压缩中的应用。

相关教材章节:第十四章 数据结构与算法 §5 哈夫曼编码2. 哈夫曼树的构建:讲解哈夫曼树的构建过程,包括选择、合并及构建哈夫曼树的方法。

相关教材章节:第十四章 数据结构与算法 §5 哈夫曼编码3. 哈夫曼编码与解码:介绍哈夫曼编码方法,以及如何利用哈夫曼树进行数据的编码和解码。

相关教材章节:第十四章 数据结构与算法 §5 哈夫曼编码4. C语言实现哈夫曼编码:教授如何利用C语言编写程序实现哈夫曼树的构建、编码和解码过程。

相关教材章节:第十四章 数据结构与算法 §6 C语言实现哈夫曼编码教学内容安排与进度:第一课时:哈夫曼编码基本原理介绍第二课时:哈夫曼树的构建方法及步骤第三课时:哈夫曼编码与解码方法第四课时:C语言实现哈夫曼编码(上)第五课时:C语言实现哈夫曼编码(下)及实践练习本教学内容旨在保证学生掌握哈夫曼编码相关知识,注重理论与实践相结合,使学生在学习过程中逐步提升编程能力和解决问题的能力。

c哈夫曼树课程设计

c哈夫曼树课程设计

c哈夫曼树课程设计一、教学目标本课程的目标是让学生掌握哈夫曼编码的基本原理和构建哈夫曼树的方法。

通过本课程的学习,学生应能理解哈夫曼编码的优势和应用场景,掌握构建哈夫曼树的基本步骤,并能运用哈夫曼编码解决实际问题。

具体来说,知识目标包括:1.了解哈夫曼编码的原理和特点。

2.掌握构建哈夫曼树的方法和步骤。

3.理解哈夫曼编码在信息传输和数据压缩中的应用。

技能目标包括:1.能够运用哈夫曼编码对字符串进行编码和解码。

2.能够构建哈夫曼树并计算编码后的字符串的冗余度。

3.能够分析给定字符串的频率分布,并构建相应的哈夫曼树。

情感态度价值观目标包括:1.培养学生的逻辑思维能力和问题解决能力。

2.培养学生对信息传输和数据压缩的兴趣和好奇心。

3.培养学生对算法优化和创新思维的重视。

二、教学内容本课程的教学内容主要包括哈夫曼编码的基本原理、构建哈夫曼树的方法和应用。

具体的教学大纲如下:1.第一章:哈夫曼编码的基本原理–哈夫曼编码的定义和特点–哈夫曼编码的构建步骤2.第二章:构建哈夫曼树的方法–哈夫曼树的构建算法–哈夫曼树的性质和应用3.第三章:哈夫曼编码的应用–信息传输中的哈夫曼编码–数据压缩中的哈夫曼编码4.第四章:案例分析和实验–字符串编码和解码的案例分析–构建哈夫曼树并计算冗余度的实验三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法相结合的方式。

具体包括:1.讲授法:通过讲解哈夫曼编码的基本原理和构建哈夫曼树的方法,引导学生理解和掌握相关知识。

2.讨论法:通过小组讨论和课堂讨论,让学生积极参与进来,提出问题并解决问题。

3.案例分析法:通过分析实际案例,让学生将理论知识应用到实际问题中,提高问题解决能力。

4.实验法:通过实验操作,让学生亲手构建哈夫曼树并计算冗余度,加深对知识的理解和记忆。

四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将选择和准备以下教学资源:1.教材:选择一本与哈夫曼编码和数据压缩相关的教材,作为学生学习的基础资源。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构课程设计哈弗曼编码程序说明书一、使用手册:1、在字符里面输入字符(单个字符)以空格隔开,输入最大字符数量100;2、输入完成后点击哈弗曼编码按钮,然后再右边的列表控件中显示出字符、权值以及相应的哈弗曼代码。

3、运行完一次后点击清空按钮。

清空右边列表控件的内容,然后再测试下一组值。

可以用delete键删除二.可行性分析通过对输入编辑框中的字符进行分型,通过最这个字符进行遍历,获得每个字母的重复次数。

以此作为该字符的权值存入数组weight[]中,并与字符数组相对应,并将权值作为参数传入Status CHafumanDlg::HuffmanCoding(HuffmanTree &HT, HuffmanCode &HC, int *w, int n)中,利用对应的处理函数获得哈弗曼编码,最后输出在列表控件中。

二、概要设计在vc++6.0中生成的改程序1、建立基于对话框的程序,在类CHafumanDlg中添加构造哈弗曼树的代码;2、向对话框中添加静态文本控件(caption改为字符);接着添加编辑框并关联String类型的关联变量m_zifu,还有两个按钮(caption 分别改为清空和哈弗曼代码)以及一个列表控件,并关联一个CLisrCtrl类型的变量m_list;然后分别为清空和哈弗曼编码按钮添加相应的响应函数三、源代码1构造哈弗曼树的代码(1)// hafumanDlg.h : header file//头文件//#if !defined(AFX_HAFUMANDLG_H__ACA655FF_81FF_452A_855C_32381C74 3BB5__INCLUDED_)#defineAFX_HAFUMANDLG_H__ACA655FF_81FF_452A_855C_32381C743BB5__INC LUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000/////////////////////////////////////////////////////////////////////////////// CHafumanDlg dialog#define ok 1#define error 0typedef int Status;typedef struct{unsigned int weight;unsigned int parent,lchild,rchild;}HTNode, *HuffmanTree;//动态分配数组存储赫夫曼树typedef char * *HuffmanCode;//动态分配数组存储赫夫曼编码表class CHafumanDlg : public CDialog{// Constructionpublic:Status HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int *w,int n);Status Select(HuffmanTree HT,int n,int &n1,int &n2);CHafumanDlg(CWnd* pParent = NULL); // standard constructor};(2)// hafumanDlg.cpp : implementation file//#include "stdafx.h"#include "hafuman.h"#include "hafumanDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CAboutDlg dialog used for App AboutStatus CHafumanDlg::Select(HuffmanTree HT, int n, int &n1, int &n2){// 在HT[i-1]中选择parent为0求weight最小的两个节点int i;for (i=1;i<=n && HT[i].parent!=0 ;i++);n1=i;for (i=1;i<=n;i++)if (HT[i].parent==0 && HT[i].weight<HT[n1].weight) n1=i;for (i=1; i<=n ; i++)if (HT[i].parent==0 && i!=n1) break;n2=i;for (i=1;i<=n;i++)if ( HT[i].parent==0 && i!=n1 && HT[i].weight<HT[ n2].weight) n2=i;return ok;(3)// hafumanDlg.cpp : implementation file//#include "stdafx.h"#include "hafuman.h"#include "hafumanDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CAboutDlg dialog used for App AboutStatus CHafumanDlg::HuffmanCoding(HuffmanTree &HT, HuffmanCode &HC, int*w, int n){//w存放n个字符的权值,构造赫夫曼树HT,并求出n个字符的赫夫曼编码int m,s1,s2,i,start;unsigned int c,f;char *cd;if(n<=1)return error;m=2*n-1;//赫夫曼树的总节点数HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));//0号单元未用//初始化赫夫曼树for(i=1;i<=n;i++)//1到n号节点{HT[i].weight=w[i-1];HT[i].parent=0;HT[i].lchild=0;HT[i].rchild=0;}for(i=n+1;i<=m;i++)//n+1号到m号节点{HT[i].weight=0;HT[i].parent=0;HT[i].lchild=0;HT[i].rchild=0;}for(i=n+1;i<=m;i++){//构建赫夫曼树Select(HT,i-1,s1,s2);//选择weight最小的两个节点是s1,s2HT[s1].parent=i;HT[s2].parent=i;HT[i].lchild=s1;HT[i].rchild=s2;HT[i].weight=HT[s1].weight+HT[s2].weight;}//----从叶子节点到根逆向求每个字符的赫夫曼编码----HC=(HuffmanCode)malloc((n+1)*sizeof(char*));//分配n个字符编码的头指针向量cd=(char *)malloc(n*sizeof(char)); //分配求编码的工作空间cd[n-1]='\0';//编码结束符for(i=1;i<=n;i++){//逐个字符求赫夫曼编码start=n-1;//编码结束位置for(c=i,f=HT[i].parent;f!=0;c=f,f=HT[f].parent)//从叶子到根逆向求编码if(HT[f].lchild==c)cd[--start]='0';elsecd[--start]='1';HC[i]=(char *)malloc((n-start)*sizeof(char));//为第i个字符编码分配空间strcpy(HC[i],&cd[start]);//从cd复制编码(串)到HC }free(cd);//释放cdreturn ok;}2、构造可视化界面的代码(1)初始化列表控件BOOL CHafumanDlg::OnInitDialog(){CDialog::OnInitDialog();// Add "About..." menu item to system menu.// IDM_ABOUTBOX must be in the system command range.char *szItems[]={"字符","权值","哈弗曼代码"};int nWidths[]={100,100,100,100};//#define ITEMS(sizeof(szItems)/sizeof(char*))#define ITEMS (sizeof(szItems)/sizeof(char*))LV_COLUMN lc;memset(&lc,'\0',sizeof(LV_COLUMN));lc.mask=LVCF_TEXT|LVCF_WIDTH|LVCF_SUBITEM;for (int sub=0;sub<ITEMS;++sub){lc.iImage=sub;lc.pszText=szItems[sub];lc.cx=nWidths[sub];m_list.InsertColumn(sub,&lc);}ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// Set the icon for this dialog. The framework does this automatically// when the application's main window is not a dialogSetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small icon// TODO: Add extra initialization herereturn TRUE; // return TRUE unless you set the focus to a control}(2)哈弗曼代码按钮控件的响应函数void CHafumanDlg::OnBianma(){// TODO: Add your control notification handler code hereUpdateData();char ZiFu[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};int number[26]={0},count=0,length,weight[26]={0},i;char ZiFu1[26],ZiFu2[100],ZiFU3[26][2];strcpy(ZiFu2,m_zifu);length=strlen(ZiFu2);if (length=1)MessageBox("请输入两个以上的字符");else{for(i=0;i<26;i++)strcpy(ZiFU3[i]," ");for(i=0;i<length;i++)if(ZiFu2[i]!=' '){switch(ZiFu2[i]){case 'a':number[0]++;if(number[0]!=0) ZiFu1[0]=ZiFu[0];break;case 'b':number[1]++;if(number[1]!=0) ZiFu1[1]=ZiFu[1];break;case 'c':number[2]++;if(number[2]!=0) ZiFu1[2]=ZiFu[2];break;case 'd':number[3]++;if(number[3]!=0) ZiFu1[3]=ZiFu[3];break;case 'e':number[4]++;if(number[4]!=0) ZiFu1[4]=ZiFu[4];break;case 'f':number[5]++;if(number[5]!=0) ZiFu1[5]=ZiFu[5];break;case 'g':number[6]++;if(number[6]!=0) ZiFu1[6]=ZiFu[6];break;case 'h':number[7]++;if(number[7]!=0) ZiFu1[7]=ZiFu[7];break;case 'i':number[8]++;if(number[8]!=0) ZiFu1[8]=ZiFu[8];break;case 'j':number[9]++;if(number[9]!=0) ZiFu1[9]=ZiFu[9];break;case 'k':number[10]++;if(number[10]!=0) ZiFu1[10]=ZiFu[10];break;case 'l':number[11]++;if(number[11]!=0) ZiFu1[11]=ZiFu[11];break;case 'm':number[12]++;if(number[12]!=0) ZiFu1[12]=ZiFu[12];break;case 'n':number[13]++;if(number[13]!=0) ZiFu1[13]=ZiFu[13];break;case 'o':number[14]++;if(number[14]!=0) ZiFu1[14]=ZiFu[14];break;case 'p':number[15]++;if(number[15]!=0) ZiFu1[15]=ZiFu[15];break;case 'q':number[16]++;if(number[16]!=0) ZiFu1[16]=ZiFu[16];break;case 'r':number[17]++;if(number[17]!=0) ZiFu1[17]=ZiFu[17];break;case 's':number[18]++;if(number[18]!=0) ZiFu1[18]=ZiFu[18];break;case 't':number[19]++;if(number[19]!=0) ZiFu1[19]=ZiFu[19];break;case 'u':number[20]++;if(number[20]!=0) ZiFu1[20]=ZiFu[20];break;case 'v':number[21]++;if(number[21]!=0) ZiFu1[21]=ZiFu[21];break;case 'w':number[22]++;if(number[22]!=0) ZiFu1[22]=ZiFu[22];break;case 'x':number[23]++;if(number[23]!=0) ZiFu1[23]=ZiFu[23];break;case 'y':number[24]++;if(number[24]!=0) ZiFu1[24]=ZiFu[24];break;case 'z':number[25]++;if(number[25]!=0) ZiFu1[25]=ZiFu[25];break;// case 'c':number[2]++;if(number[2]!=0) ZiFu1[2]=ZiFu[2];break;}}for(i=0;i<26;i++){if(number[i]!=0){weight[count]=number[i];ZiFU3[count][0]=ZiFu1[i];count++;}}}HuffmanTree HT;HuffmanCode HC;HuffmanCoding(HT, HC,weight,count);for (int e=0;e<count;e++){char a[20];itoa(weight[e],a,10);int index=m_list.InsertItem(m_list.GetItemCount(),&ZiFU3[e][0],e);m_list.SetItemText(index,1,a);m_list.SetItemText(index,2,HC[e+1]);}}(2)、清空按钮的响应函数void CHafumanDlg::OnButton1(){// TODO: Add your control notification handler code hereif (m_zifu.IsEmpty())MessageBox("请输入字符");m_zifu=" ";UpdateData(FALSE);m_list.DeleteAllItems();}四.测试结果1输入a n n n n n j j s t o l k w r s g g h s g结果:字符权值哈弗曼编码a 1 11110g 3 101h 1 11111j 2 1110k 1 0000l 1 00001n 5 01o 1 0010r 1 0011s 3 110t 1 1000w 1 10012测试结果二输入a m k m k字符权值哈弗曼编码a 1 10k 2 11m 2 0。

相关文档
最新文档