数据结构&&课程设计&&哈夫曼编译码器

您所在的位置:网站首页 哈夫曼树编译码系统设计 数据结构&&课程设计&&哈夫曼编译码器

数据结构&&课程设计&&哈夫曼编译码器

2024-07-17 22:19| 来源: 网络整理| 查看: 265

哈夫曼编译码器

点击获取课程设计报告

目录 哈夫曼编译码器需求分析1. 哈夫曼编译码器的功能是:1.1 初始化1.2 编码1.3 译码1.4 输入哈夫曼编码表 2. 设计思路3. 设计思路分析(1)**编码**(2)**译码** 4. 测试数据: 概要设计(源代码)1、元素类型、结点类型和指针类型:2、创建哈夫曼树:3、Select()选择权值最小的结点4、创建哈夫曼编码表5、编码功能实现EnCode():6、译码功能实现:7、主函数和其他函数:5. 调用关系图 end!!!心得体会总结哈夫曼树的构造算法过程:

需求分析 1. 哈夫曼编译码器的功能是: 1.1 初始化

从文件“ HuffmanCode.txt ” 读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并构建哈夫曼编码表。

1.2 编码

利用已建好的哈夫曼树,对文件“ 明文.txt ”中的正文进行编码,然后将结果存入文件“ HuffmanEnCode.txt ”中。

1.3 译码

利用已建好的哈夫曼树将文件“ 密文.txt ” 中的代码进行译码,结果存入文件“ HuffmanDeCode.txt ”中。

1.4 输入哈夫曼编码表

将哈夫曼编码表打印到屏幕上。

2. 设计思路

用结构体数组存储哈夫曼树,用字符串数组存储哈夫曼编码表。

3. 设计思路分析

将所有单元中的双亲、左孩子、右孩子的下标都初始化为0,再输入n个单元中叶子结点的字符、权值。通过n-1次的选择、删除与合并来创建哈夫曼树。选择功能另有函数说明,删除即将结点s1 和 s2 的双亲改为其下标值;合并即将s1 和 s2 的权值和作为一个新的权值依次存入到数组的第n+1 之后的单元中,同时记录这个新结点左孩子的下标为s1 ,右孩子的下标为s2。

(1)编码

有了字符集的哈夫曼编码表之后,对数据文件的编码过程是:依次读人文件中的字符c.在哈夫曼编码表HC中找到此字符,将字符C转换为编码表中存放的编码串。

(2)译码

对编码后的文件进行译码的过程必须借助于哈夫曼树。具体过程是:依次读人文件的二进制码,从哈夫曼树的根结点(即HT[m])出发,若当前读人0,则走向左孩子,否则走向右孩子。且到达某-叶子HT[]时便译出相应的字符编码HC[]。然后重新从根出发继续译码,直至文件结束。

4. 测试数据: 1、abcdefg编码-> 01101111111111101100000011110101010111100000 2、aebdcdfd编码->011011111101011111000001111011000000110101000001 3、01101111111111101100000011110101010111100000译码->abcdefg 4、0110011110001001101111110000101000110110111011000->Huantao 概要设计(源代码) 1、元素类型、结点类型和指针类型: typedef struct { char c; int weight; int parent, lchild, rchild; }HTNode, * HuffmanTree; typedef char ** HuffmanCode;//动态分配数组储存的哈夫曼编码表 2、创建哈夫曼树: int CreateHuffmanTree(HuffmanTree& HT, int &n) { int root;//记录数根 int s1=0, s2=0; //初始化 int m;//总结点数 m = 2 * n - 1; HT = new HTNode[m + 1]; infile(HT, n); for (int i = 1; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3