数据结构课程设计哈夫曼编码译码器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
题目一:哈夫曼编码与译码
一、任务
设计一个利用哈夫曼算法的编码和译码系统,重复地显示并处理以下项目,直到选择退出为止。
要求:
1)将权值数据存放在数据文件(文件名为data.txt,位于执行程序的当前目录中) ;
2)初始化:键盘输入字符集统计字符权值、自定义26个字符和26个权值、统计文件中一篇英文文章中26个字母,建立哈夫曼树;
3)编码:利用建好的哈夫曼树生成哈夫曼编码;
4)输出编码(首先实现屏幕输出,然后实现文件输出);
5)译码(键盘接收编码进行译码、文件读入编码进行译码);
6)界面优化设计。
二、流程图
三、代码分解 //头文件
#include
void count(CHar &ch,HTNode ht[]); void editHCode(HTNode ht[],HCode hcd[],CHar &ch,int n,char bianma[]); //编码函数
void printyima(HTNode ht[],HCode hcd[],int n,char bianma[]); //译码函数
void creatHT(HTNode ht[],int n);
void CreateHCode (HTNode ht[],HCode hcd[],int n); void DispHCode(HTNode ht[],HCode hcd[],int n); void input_key(CHar &ch); void input_file(CHar &ch); void input_cw(HTNode ht[]);
void bianma1(HTNode ht[],HCode hcd[],CHar &ch,int n,char bianma[]); void bianma2(HTNode ht[],HCode hcd[],CHar &ch,int n,char bianma[]); void yima1(HTNode ht[],HCode hcd[],int n,char bianma[]);
主菜单
1.建立字
符权值 2.建立并输出哈夫曼树
3.建立并查看哈弗曼编码
4.编码与译码
0.退出系统
1.从键盘输入字符集统计
2.从文件读入字符集统计权值
3.自定义字符及权值
0.返回上级菜单
输出哈夫曼树并保存至文件“哈夫曼树。t xt” 输出哈夫曼编码并保存至文
件“哈夫曼编码。txt
1.编码
2.译码 0.返回上级菜单
1.从键盘输入字符集进行编码
2.从文件读入字符集进行编码
1.从键盘输入编
码进行译码
2.从文件读入编码进行译码
0.返回上级菜单
0.返回上级菜单
void yima2(HTNode ht[],HCode hcd[],int n,char bianma[]); void creat_cw();
void bianmacaidan();
void yimacaidan();
void bianmayima();
int caidan();
//结构体
typedef struct
{
char data;
int parent;
int weight;
int lchild;
int rchild;
}HTNode;
typedef struct
{
char cd[N];
int start;
}HCode;
typedef struct
{
char s[N];
int num;
}CHar;
CHar ch;
HTNode ht[M];
HCode hcd[N];
//主函数
int main()
{
int xh;
while(1)
{
system("color 1f"); //操作菜单背景颜色
xh=caidan(); //调用菜单函数
switch(xh) //switch语句
{
case 1:system("cls");creat_cw();break;
case 2:system("cls");creatHT(ht,n);break;
case 3:system("cls");CreateHCode(ht,hcd,n);DispHCode(ht,hcd,n);break;
case 4:system("cls");bianmayima();break;
case 0:system("cls");printf("\n\n\n\n\n\n\n\n\n\t\t\t\t感谢使用本系统!\n\n\n\n\n\n\n \t\t\t");exit(0);
default:system("cls");putchar('\a');
printf("\n\t\t输入有误,请重新输入:\n");break;
}
}
return 0;
}
//菜单函数
int caidan() //菜单函数模块//
{
int xh;
printf("\n\n\n");
printf("\t\t 欢迎使用哈夫曼编码译码系统\n");
printf("\t\t \n");
printf("\t\t*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* \n");
printf("\t\t*= =*\n");
printf("\t\t*= *=*=*=*=*=*=*=*=*=*=*= =*\n"); printf("\t\t*= 1.建立字符权值=*\n");
printf("\t\t*= *=*=*=*=*=*=*=*=*=*=*= =*\n"); printf("\t\t*= 2.建立并输出哈夫曼树=*\n");
printf("\t\t*= *=*=*=*=*=*=*=*=*=*=*= =*\n"); printf("\t\t*= 3.生成并查看哈夫曼编码=*\n");
printf("\t\t*= *=*=*=*=*=*=*=*=*=*=*= =*\n");