• 大小: 0.01M
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-03-28
  • 语言: 其他
  • 标签: 其他  

资源简介


设计一个利用哈夫曼算法的编码和译码系统,重复地显示并处理“要求”中项目,直到选择退出为止。 要求: (1)将权值数据存放在数据文件(文件名为data.txt,位于执行程序的当前目录中) (2)分别采用动态和静态存储结构 (3)从键盘输入字符集大小n、n个字符和n个权值,建立哈夫曼树; (4)利用建好的哈夫曼树生成哈夫曼编码; (5)输出编码; 用户可以执行的的功能有: (1)---选择读取某个源文件由系统解析建立哈夫曼树 (2)---手动输入字符集及其权值信息建立哈夫曼树 (3)---打印字符集的哈夫曼编码到屏幕 (4)---选择某个文本文件进行编码 (5)---选择某个代码

资源截图

代码片段和文件信息

/*设计一个利用哈夫曼算法的编码和译码系统,重复地显示并处理“要求”中项目,直到选择退出为止。
 要求:
(1)将权值数据存放在数据文件(文件名为data.txt,位于执行程序的当前目录中) 
(2)分别采用动态和静态存储结构
(3)从键盘输入字符集大小n、n个字符和n个权值,建立哈夫曼树;
(4)利用建好的哈夫曼树生成哈夫曼编码;
(5)输出编码;
设字符集及频度如下:
字符: 空格 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*/
#include 
#include 
#include 
#define MAXVAL 10000.0
struct hufmtreenode{//哈弗曼树结点数据类型
char data;
float weight;//结点权值
int parentlchildrchild;//父结点,左、右孩子结点
};
struct hufmtree{//哈弗曼树数据类型
hufmtreenode *node;//结点数组(根据n的值动态分配)
int n;//叶子结点数
};
struct Codetype{//哈弗曼编码数据类型
char *bits;//编码流数组,n为为哈夫曼树中叶子结点的数目,编码的长度不可能超过n
int start;//编码实际在编码流数组里的开始位置
};
void SortHufmtree(hufmtree *tree){//将哈夫曼树n个叶子结点由大到小排序
int ijk;
hufmtreenode temp;
if (tree==NULL)
return;
for (i=0;in;i++)
{
k=i;
for(j=i+1;jn;j++)
if (tree->node[j].weight>tree->node[k].weight)
k=j;

评论

共有 条评论