题目8:哈夫曼编码/译码器 实验类型(验证/设计/创新):设计 学时:16 课程设计内容: 设计一个哈夫曼编码/译码系统,对一个文本文件中的字符进行哈夫曼编码,生成编码文件;反过来,可将一个编码文件译码还原为一个文本文件(.txt)。要求: 7.输入一个待压缩的文本文件名, 统计文本文件中各字符的个数作为权值,生成哈夫曼树; 8.将文本文件利用哈夫曼树进行编码,生成压缩文件; 9.输入一个待解压的压缩文件名称,并利用相应的哈夫曼树将编码序列译码; 10.可显示指定的压缩文件和文本文件; 课程设计要求: 熟练掌握哈夫曼树的构建方法;能够运用哈夫曼树实现哈夫曼编码和译码。 重点难点: 【本课程设计重点】哈夫曼树的构建和哈夫曼编码。 【本课程设计难点】各字符出现频率的统计、哈夫曼树的构建和哈夫曼译码。
//
// Created by andyzhong on 2021/7/1.
//
#include
#include
#include
#include
using namespace std;
char filenamemi[100];
char filefile[100];
char filebian[100];
typedef struct
{
int weight;
char flag;
int parent, lchild, rchild;
} HTNode, *HuffmanTree;
typedef struct ASCII
{
char flag;
int c;
struct ASCII *next;
} ASCII, *LinkList;
typedef struct txt
{
char flag;
char huffman[5000];
} txtNode;
LinkList L;
typedef char **HuffmanCode;
bool InitList(LinkList &L)//初始化链表
{
L = new ASCII;
L->c = 1;
L->next = NULL;
return true;
}
void Show(LinkList L)//显示链表
{
LinkList p;
p = L->next;
while(p)
{
printf(" %c, %d\n", p->flag, p->c);
p = p->next;
}
coutflag == a)//如果在文本中出现了, 当前字符, 那么当前字符的权重值++
{
s->c++;
instance = 1;
break;
}
s = s->next;
}
if(instance == 0)//如果当前文本没有该字符, 那么, 创建该字符,插入到文本当中
{
p = new ASCII;
p->flag = a;
p->c = 1;
m->next = p;
p->next = NULL;
m = p;
num++;//文本中多少结点
}
instance = 0;
}
cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?