云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 数据结构课程设计哈夫曼编译器

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

  • 62 次阅读
  • 3 次下载
  • 2025/6/7 19:51:11

中南大学

数据结构课程设计报告

. . 题 目 哈夫曼编译器

学生 指导教师

学 院 信息科学与工程学院 专业班级 计科1302 .

目录

实验要求……………………………………………3 问题描述……………………………………………3 问题解决方法………………………………………3

程序模块功能及流程图……………………………4 调试与测试…………………………………………8 测试结果……………………………………………9 心得体会……………………………………………11 源代码………………………………………………12

. . .

一.实验要求

(1)从键盘读入字符集大小n , 以及n个字符和权值,建立哈夫曼树。 (2)利用已建好的哈夫曼树对文件正文进行编码,将结果存入相关文件中。 (3)利用已建好的哈夫曼树将编码文件中的代码进行译码,结果存入文件中。 (4)输出代码文件,以紧凑格式显示。

二.问题描述

利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码。对于双向传输信息的信道,每端都需要一个完整的编译码系统。为这样的信息收发站编写哈夫曼编译系统。

哈夫曼树又称最优二叉树,构造的规则即给定n个权值不同的叶子节点,构造一棵二叉树,使二叉树的带权路径长度达到最小。具体做法即要使权值较大的结点离根节点较近,权值较小的结点离根节点较远。 三.问题解决方法

建立哈夫曼树时要进行多次选择,每次选择出权值最小和次小的两个节点,将两结点权值相加,作为新生成父节点的权值。并分别将其作为左、右孩子。再将父节点加入需选择的结点序列中,继续选择,直到将所有节点都选完为止,构成一颗哈夫曼树。每种字符对应一个节点,将每种字符的出现次数作为对应节点权值。

在编码过程中,较科学的方法是统计文章中每种字符出现的频率,并以其作为对应节点的权值,使出现频率较高的节点离根结点较近,从而使出现频率越高的字符所得的编码位数越少,这样做得到的编码结果是最简练的,也更有利于译码。

编码需从叶节点向上回溯,若叶节点为其父结点的左孩子,则编码为0,若为右孩子,则编码为1。然后将父节点作为下一轮循环的子节点,继续重复上述步骤,直至到达根节点为止,即得到初始叶节点对应的编码。

译码是编码的逆过程,所以译码只需读入编码位串,从根结点开始,若读到0,则走向左孩子,读到1,则走向右孩子。并将对应的子节点作为下一轮循环

. . .

的叶节点,重复上述步骤,直至到达最终叶节点,该叶节点即为编码对应的节点。 四.程序模块功能及流程图 1.主要程序模块及功能 (1)建立哈夫曼树 数据结构:

tree[]为定义在Huffmantree类上的数组对象。 n为节点个数,即字符种类数。

m为建好的哈夫曼树的总节点数,在哈夫曼树中,m=2*n-1。 Smal、small2分别存放每轮循环中权值最小和次小的节点的权值。 p1,p2分别记住每次合并时权值最小和次小的两个根结点的下标。 对应代码段:

for(i=0;i

tree[i]=new Huffmantree(); }

float small1,small2; //建立哈夫曼树

for(i=0;i

tree[i].parent=0; tree[i].lchild=-1; tree[i].rchild=-1; tree[i].weight=0; }

叶节点对应一种字符

{

tree[i].ch=ch[i]; tree[i].weight=arr[i]; }

for(i=n;i

p1=0;p2=0;

small1=10000;small2=100;

for(j=0;j

small2=small1;

for(i=0;i

. . .

搜索更多关于: 数据结构课程设计哈夫曼编译器 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

中南大学 数据结构课程设计报告 . . 题 目 哈夫曼编译器 学生 指导教师 学 院 信息科学与工程学院 专业班级 计科1302 . <

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com