哈夫曼编/译码器 二叉树、树、森林的表示及操作

天空的紫雨在飘 20 0 RAR 2018-12-19 06:12:51

一、问题描述 利用哈夫曼编码进行通信可以大大提高1言道利用率,缩短信息传速时间,降低传输成本。但是.这要求在发送端通过一个编码系统对待传数据预先编码.在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输俏息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站写一个哈夫曼码的编/译码系统。 二、基本要求 一个完挂的系统应具有以下功能: (1) I:初始化(Initialization).从终端读入字符集大小n,以及n个字符和二个权值.建立哈夫曼树.井将它存于文件卜主怕丁hfmTree中. (2) E:编码(Encoding)。利用以建好的哈夫曼树(如不在内存.则从文件hfmTree中读入),对文件ToBeT-n中的正文进行编码.然后将结果存入文件CodeFile中。 (3) D:译码(Decoding).利用已建好的哈夫受树将文件CodeFile中的代码进行译码,结果存入文件TextFiie中. (4) P:印代码文件(Print).将文件CodeFile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码文件写入文件CxdePrin中. (5) T:印哈夫受树( Tree printing).将已在内存中的哈夫垦树以直观的方式(树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼材写入文件丁TreePint中。 三、需求分析 1、建立哈夫曼树。 2、 编码:即将文本文件中的每个字符用huffman编码代替,并写入二进制文件中。也就是说,压缩文件是一个记录文件内容的二进制流。 3、译码:将二进制文件还原为文本文件。 四、概要设计 由于一棵有n个叶子结点的哈夫曼树共有2n-1个结点,考虑到程序的执行效率,可以将二叉树存放在连续空间里(静态链表),空间的每个结点内仍有左子树、右子树、双亲等指针,以便译码和解码。即存储在一个大小为2n-1的一维数组中,每个结点的结构为: struct node{ int w; int flag; char c; struct node *plink,*llink,*rlink; char code[50]; }*num[100],*root;

用户评论
请输入评论内容
评分:
Generic placeholder image 卡了网匿名网友 2018-12-19 06:12:51

不错的资源。谢谢分享。

Generic placeholder image 卡了网匿名网友 2018-12-19 06:12:51

有问题,好像运行不了