哈夫曼树课程设计

合集下载

电报哈夫曼树课程设计

电报哈夫曼树课程设计

电报哈夫曼树课程设计一、课程目标知识目标: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.设计目的数据结构作为一门学科主要研究数据的各种逻辑结构和存储结构,以及对数据的各种操作。

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

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

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

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

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

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

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

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

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

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

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

  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。

相关文档
最新文档