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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

题目一:哈夫曼编码与译码

一、任务

设计一个利用哈夫曼算法的编码和译码系统,重复地显示并处理以下项目,直到选择退出为止。

要求:

1)将权值数据存放在数据文件(文件名为data.txt,位于执行程序的当前目录中) ;

2)初始化:键盘输入字符集统计字符权值、自定义26个字符和26个权值、统计文件中一篇英文文章中26个字母,建立哈夫曼树;

3)编码:利用建好的哈夫曼树生成哈夫曼编码;

4)输出编码(首先实现屏幕输出,然后实现文件输出);

5)译码(键盘接收编码进行译码、文件读入编码进行译码);

6)界面优化设计。

二、流程图

三、代码分解 //头文件

#include #include #include #include #define N 1000 #define M 2*N-1 #define MAXcode 6000 //函数声明

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");

相关文档
最新文档