数据结构c语言版哈夫曼编码,基于C语言的哈夫曼编码的实现

摘要:介绍了哈夫曼编码的思想,以及利用C语言实现哈夫曼编码的详细过程。

关键词:哈夫曼编码;权值;哈夫曼树;二叉树

中图分类号:TP312文献标识码:A文章编号:16727800(2012)009004003

0引言

数据通讯中,经常需要将传送的字符转换为由二进制字符0或1组成的二进制串,我们称此过程为编码。而哈夫曼树可以用来构造代码总长度最短的编码方案,将需要编码的字符作为叶节点,字符在电文中出现的频率作为权值,构造一颗二叉树,规定哈夫曼树的左分支为0,右分支为1,则从根节点到每个叶结点所经历的分支对应的0和1组成的数列变为该结点对应的字符编码。这种总长度最短的不等长编码就叫做哈夫曼编码。利用哈夫曼编码通信可以大大提高通信利用率,缩短通信传输时间,降低传输成本。

1问题描述

利用C语言编程实现哈夫曼编码。要求:用户输入各字母及使用频率(或频数),用程序输出二进制表示的哈夫曼编码,并采用菜单和会话方式的界面。

2算法思想

(1)哈夫曼编码根据与n个权值{w1,w2,……wn}对应的n个结点构成n棵二叉树的森林,F= {T1,T2,……Tn},其中每棵二叉树Ti(1

(2)在森林F中选出两棵根结点权值最小的树作为一棵新树的左右子树,且置新树的附加根结点的权值为其左右树上根结点的权值之和。

(3)从F中删除这两棵树,同时把新树加入F中。

(4)重复(2)和(3)直到只含有一棵树为止,此时便是哈夫曼树。

(5)树从根到每个叶子都有一条路径,对路径上的各分支约定,指向左子树的分支表示 ‘0’ 码,指向右子树的分支表示 ‘1’ 码 。

(6)取每条路径上 ‘0’ 或 ‘1’ 的序列作为各个叶子对应的字符编码,这就是哈夫曼编码。

3逻辑设计

树的逻辑结构是层次结构,树中有且仅有一个没有前驱的结点ht[0]称为树的根,除根ht[0]以外的每个结点都有且只有一个前驱,对于不是根的每一个结点ht[I]都有一个线性序列ht[0],ht[1],……ht[I-1],ht[I] (I>=0),其中ht[I]是ht[I-1]的后继。

4存储结构的设计

7结语

此程序是根据笔者平时积累的教学经验,结合数据结构和C语言编程技术开发完成。该算法简单易懂,源代码在visual C++中运行调试通过,对哈夫曼编码理论的学习有着较大帮助。

参考文献:

[1]严蔚敏,吴伟民.数据结构:第1版[M].北京:清华大学出版社,2003.

[2]朱站立.数据结构——使用C语言:第3版[M].西安:西安交通大学出版社,2004.

[3]陈桂琴.用C实现完整的哈夫曼编码系统[J].河北工程技术高等专科学校学报,2004(4).

[4]李亚岗,吕海莲.哈夫曼编码的Java实现[J].平顶山师范高等专科学校学报,2002(4).

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
系统根据B/S,即所谓的电脑浏览器/网络服务器方式,运用Java技术性,挑选MySQL作为后台系统。系统主要包含对客服聊天管理、字典表管理、公告信息管理、金融工具管理、金融工具收藏管理、金融工具银行卡管理、借款管理、理财产品管理、理财产品收藏管理、理财产品银行卡管理、理财银行卡信息管理、银行卡管理、存款管理、银行卡记录管理、取款管理、转账管理、用户管理、员工管理等功能模块。 文中重点介绍了银行管理的专业技术发展背景和发展状况,随后遵照软件传统式研发流程,最先挑选适用思维和语言软件开发平台,依据需求分析报告模块和设计数据库结构,再根据系统功能模块的设计制作系统功能模块图、流程表和E-R图。随后设计架构以及编写代码,并实现系统能模块。最终基本完成系统检测和功能测试。结果显示,该系统能够实现所需要的作用,工作状态没有明显缺陷。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。进入银行卡列表,管理员可以进行查看列表、模糊搜索以及相关维护等操作。用户进入系统可以查看公告和模糊搜索公告信息、也可以进行公告维护操作。理财产品管理页面,管理员可以进行查看列表、模糊搜索以及相关维护等操作。产品类型管理页面,此页面提供给管理员的功能有:新增产品类型,修改产品类型,删除产品类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值