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

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

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

一、任务

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

要求:

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

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

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

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

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

6) 界面优化设计。

二、流程图

主菜单

1.建立字符权值

2.建立并输出

哈夫曼树

3.建立并查看

哈弗曼编码

4.编码与译码0.退出系统

1.从键盘输入字符集统计

2.从文件读入字

符集统计权值

3.自定义字符及

权值

0.返回上级菜单输出哈夫曼树并保存

至文件“哈夫曼树。t xt”

输出哈夫曼编码并保存至文

件“哈夫曼编码。txt

1.编码

2.译码0.返回上级

菜单

1.从键盘输入字

符集进行编码

2.从文件读入字

符集进行编码

1.从键盘输入编

码进行译码

2.从文件读入编

码进行译码

0.返回上级菜单0.返回上级菜单

三、代码分解

//头文件

#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[]);

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

printf("\t\t*= 4.编码与译码=*\n");

printf("\t\t*= *=*=*=*=*=*=*=*=*=*=*= =*\n");

printf("\t\t*= 0.退出系统=*\n");

printf("\t\t*= =*\n");

printf("\t\t*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");

printf("\n\t\t请输入序号进行选择:");

scanf("%d", &xh);

return xh; //返回从键盘接收的选项

}

void bianmayima()

相关文档
最新文档