哈夫曼编码译码器数据结构C语言

2019-03-09 17:56

人生充满着期待,梦想连接着未来。 一、需求分析 目前

进行快速远距离通信的主要手段是电报

即将需传送的文字转化成由二级制的字符组成的字符串 例如

假设需传送的电文为\它只有4种字符 只需两个字符的串 便可以分辨

假设A、B、C、D、的编码分别为00 01

10和11

则上述7个字符的电文便为\总长14位 对方接受时

可按二位一分进行译码

当然 在传送电文时

希望总长尽可能地短

如果对每个字符设计长度不等的编码

且让电文中出现次数较多的字符采用尽可能短的编码 则传送电文的总长便可减少

如果设计A、B、C、D的编码分别为0 00 1 01

则上述7个字符的电文可转换成总长为9的字符串\但是

这样的电文无法翻译

例如传送过去的字符串中前4个字符的字串\就可以有很多种译法 或是\或者\或者\等 因此

若要设计长短不等的编码

则必须是任一字符的编码都不是另一个字符的编码的前缀 这种编码称作前缀编码

然而

如何进行前缀编码就是利用哈夫曼树来做 也就有了现在的哈夫曼编码和译码

二、概要设计

利用哈夫曼树编/译码 (一)、建立哈夫曼树 (二)、对哈夫曼树进行编码 (三)、输出对应字符的编码 (四)、译码过程

主要代码实现:

struct code //结构体的定义 {

char a; int w;

int parent; int lchild; int rchild; };

void creation(code *p int n

int m); //建立哈夫曼树 void coding(code *p int n); //编码 void display(code *p int n

int m); //输出函数 void translate(char **hc code *p

int n); //译码 三、 详细设计

(一) 、建立哈夫曼树

(二) 、对哈夫曼树进行编码 主要代码实现: for(c=i

f=p[i].parent;f!=0;c=f f=p[f].parent) {

if(p[f].lchild==c) {

//左孩子编码为'0'

cd[--start]='0'; }

else {

cd[--start]='1'; } }

(三) 、输出对应字符的码 字符 编码 a 110 b 111 c 10 d 0

(四) 、译码过程 主要代码实现: if(strcmp(a

hc[i])==0) //比较两个字符串是否相等 相等则输出0 {

for(c=2*n-1

j=0;a[j]!='\\0';j++) //从根出发 按字符'0'或'1'确定找左孩子或右孩子 {

if(a[j]=='0') //左孩子 {

c=p[c].lchild; } else {

c=p[c].rchild; //右孩子 } }

//右孩子编码为'1'

四、 调试分析 (一)、数字的输入判断

(二)、字母的输入判断

(三)、程序是否继续进行的 判断

五、 用户手册

(一) 、首先根据提示输入初始化数据 提示输入一个数字 请输入一个数a

0

则请输入一个字母(a~z)或者(A~Z)中的一个字符;请勿在输入一个数字后再输入一个字符 或者在输入一个字符后再输入一个数字

(二) 在某一界面结束后

会有\请按回车继续下面操作\提示 请按提示进行操作 如输入其他数字则无效

知道输入回车符界面才会跳转

(三) 对界面的操作可以自行选择 在询问是否译码的时候 请按要求进行选择

在一次译码结束后会询问是否继续译码 如需要则输入y或者Y 输入其他字符则退出程序

六、测试结果 (一)、初始化

(二)、建立哈夫曼树

(三)、哈夫曼编码

(四)、哈夫曼译码

(五)、错误判定

附录: 源代码:

#include #include #include #include

struct code //结构体的定义 {

char a; int w;

int parent; int lchild; int rchild; };

void creation(code *p int n

int m); //建立哈夫曼树 void coding(code *p


哈夫曼编码译码器数据结构C语言.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2010年招标师考试案例分析真题及参考答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: