1 / 15
文档名称:

哈夫曼课程设计报告--哈夫曼编译码器.doc

格式:doc   大小:183KB   页数:15页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

哈夫曼课程设计报告--哈夫曼编译码器.doc

上传人:neryka98 2018/1/20 文件大小:183 KB

下载得到文件列表

哈夫曼课程设计报告--哈夫曼编译码器.doc

文档介绍

文档介绍:西安郵電大學
数据结构课程设计报告
题目: 哈夫曼编/译码器
院系名称: 计算机学院
专业名称: 软件工程
班级: 1101班
学生姓名: 武妍娜
学号(8位): 04113027
指导教师: 李培
设计起止时间:2012年12月3日~2012年12月14日
一. 设计目的
,提高综合运用本课程所学知识的能力;
、理论和方法的理解;
;
,编码和译码。
二. 设计内容
利用哈夫曼编码进行信息通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。试为这样的信息收发站写一个哈夫曼的编/译码器。
主程序模块

;
编码模块
译码模块
文件模块
密码模块

(1)主程序模块
打印菜单;
让用户选择是编码还是译码;
让用户决定是否观看一些信息。
密码模块
void Login()
密码函数,用户输入用户名和密码,密码正确方能进入系统,否则重新输入。
(3)编码模块
void OpenSourceFile(char s[])
打开源文件,并将其内容存到s[]中
void Code(char s[],char str[],char code[],int freq[],HFMTree *HT,CodeNode HC[])
编码函数,调用编码所需的所有函数
void Search(char s[],char str[],int freq[])
查找各个字符,将其存到str[]中,并统计其出现的频数,即权值,存放在freq[]中
void CreateHFMTree(HFMTree *HT,int freq[])
创建哈夫曼树
void HFMCode(HFMTree HT,CodeNode HC[],char str[])
按左0右1的顺序进行编码
AllCode(s,HC,code)
将所有字符的编码连起来,存放到code[]中
Save(code)

(4)译码模块
void DeCode(char code[],char str[],char ss[],HFMTree *HT,CodeNode HC[])
译码函数,调用译码所需的所有函数
void OpenCodeFile(char code[])
打开编码文件
Decoding(code,*HT,str,ss)
从根结点开始按编码顺序进行译码
Save(ss)

查找权值
查找字符

创建哈夫曼树
密码

编码
连接编码
编码
主函数
保存编码
打开源文件
菜单
打开文件
译码
显示哈夫曼信息
保存译码
译码
开始

(1)创建哈夫曼树函数
int i=0;
HFMTree p,HT1,HT2;
p=*HT=(HFMTree)malloc(sizeof(HFMNode));
p->next=p->LChild=p->RChild=p->Parent=NULL;
i<2n-1


i++;
p=*HT;
p->next=(HFMTree)malloc(sizeof(HFMNode));
p=p->next;
p->next=p->LChild=p->RChild=p->Parent=NULL;
i++;
i<n
i<2n-1

p->weight=freq[i];
p=p->next;
i++;

Select(*HT,i,&HT1,&HT2);
HT1->Parent=HT2->Parent=p;
p->LChild=HT1;
p->RChild=HT2;
p->weight=HT1->weight+HT2->weight;
p=p->next;
i++;
开始
(2)编码函数
int i=0;
HFMTree q,p=HT;
i<n

HC[i].ch=str[i];
HC[i].code[n-1]='\0';
i=0;

i<n
HC[i].flag=n-1;
p=q;
q->Parent!=Null;


q==q->Parent->Lchild

HC[i].code