Skip to content

TuringCodeOne/HuffmanCompiler

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 

Repository files navigation

HuffmanCompiler

一个基于c语言的简易的哈夫曼编/译码器的设计与实现(控制台)

背景

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

程序目录结构如下

G:\COMPILER
|   README.md
|
+---header
|       Header.h
|
\---source file
        codeFile.txt
        CodePrin.txt
        copyData.bin
        Header.c
        hfmTree.txt
        main.c
        TextFile.txt
        ToBeTran.txt

main.c是程序的入口,Header.h为所有函数的声明

具备的功能

  1. 初始化(Initialization)。从终端读入字符集大小n , 以及n个字符和n个权值,建立哈夫曼树,并将它存于文件hfmTree中。
  2. 编码(Encoding)。利用已建好的哈夫曼树(如不在内存,则从文件hfmTree中读人),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中。
  3. 译码(Decoding)。利用已建好的哈夫曼树将文件 CodeFile 中的代码进行译码,结果存入文件TextFile中。
  4. 打印代码文件(Print)。将文件CodeFile以紧凑格式显示在终端上,每行 50 个代码。同时将此字符形式的编码文件写入文件 CodePrin 中。
  5. 打印哈夫曼树(Tree printing)。将已在内存中的哈夫曼树以直观的方式(树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件TreePrint中。

实现

  1. 在构造哈夫曼树时,使用结构体数组HuffmanTree作为哈夫曼树的存储,初始化功能从键盘接收字符集和字符所对应的权值。并使用这些数据按教材中的算法构造哈夫曼树,即将HuffmanTree各个节点的各个数据域都附初值,并通过相应变化,使这些数据通过下标建立一定的联系。哈夫曼编码使用一维数组code作为哈夫曼编码的存储。在初始化过程中既建立了树,也将各字符的编码遍历得到。
  2. 编码操作,先打开ToBeTran.txt,并建立tocode[SIZE]存放从文件中读取到的编码的文件。并从数组开头起始,与code中的character字符相比较,若相等则输出该字符对应的longchar,依次遍历到最后。并将编码存入codeFile.txt文件中。
  3. 译码操作,先打开ToBeTran.txt,并建立tocode[SIZE]存放从文件中读取到的编码的文件。并从数组开头起始,与code中的character字符相比较,若相等则输出该字符对应的longchar,依次遍历到最后。并将0、1代码串一一存入存入codeFile.txt文件中。
  4. 译码功能,是打开文件codfile.txt,并从中读取0、1的的代码串于temp[SIZE]中,读取方式为一次仅读取一个‘1’或一个‘0’,按照初始化时建立的编码规则将其翻译成字符所组成的字符串形式,存入文件textFile.txt中。并且,在数组temp[SIZE]中,每翻译完一段0、1组成的字符串,就会被voidStr[]=""(空字符串)所覆盖,清空temp[SIZE]
  5. 打印哈夫曼树,需要打开树保存的文件hfmTree中读取每一个书的结点数据进行保存在一个数组之中p = HT;将p结点用printree()调到数组HT的最后一位,再将其传入coprint(HuffmanTree start, HuffmanTree HT),进行递归输出,先输出其右子树,然后再输入其结点数据,最后输出左子树。设置全局变量n来控制行宽,以表现树的侧向长度。

使用方法

将项目pull到本地,使用IDE运行即可。

关于

Created by PengTsinv

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages