《数据结构课程设计》题目3 哈夫曼算法的应用

问题描述

在一个加密应用中,要处理的信息来自下面的字符集,各个字符的相关使用频度如下:

 

字符

A

B

C

D

E

F

G

H

I

J

K

L

M

频度

180

64

13

23

32103

22

15

47

57

1

5

31

20

字符

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

频度

55

63

15

1

48

56

80

25

7

18

2

16

1

 

现请编写程序你实现如下功能:

(1)运行时,由用户输入来初始化字符集大小和相应用字符。

(2)输入一个要加密的字符串,将其加密。

(3)输出解密字符串。

 

问题分析

根据上述问题描述,可以看出编写的程序是通过利用二叉树结构实现哈夫曼编码和译码,并且程序需具有以下要求:

(1)   初始化:能够让用户输入字符和相应字符的频度来初始化,并建立哈夫曼树。

(2)   建立编码表:利用已经建好的哈夫曼树进行编码,并将每个字符的编码进行输出,打印哈夫曼编码表。

(3)   译码:利用已经建好的哈夫曼树对编码后的字符串进行译码,并输出译码结果。

运用哈夫曼算法的相关知识解决问题。以用户输入的字符作为需要编码的字符集合,而每个字符对应的频度则作为该字符的权值,构造一棵哈弗曼编码树,规定哈弗曼编码树的左分支代表0,右分支代表1,则从根结点到每个叶子结点所经过的路径组成的0和1的序列便为需要加密字符的编码。

本次课程设计内容涉及到哈夫曼树,哈夫曼编码,哈夫曼算法,二叉树的结构,二叉树和树的应用等等方面知识。

 

逻辑结构和存储结构设计

1.      逻辑结构设计

逻辑结构:数据的逻辑结构是树状结构。

2.      存储结构设计

(1)    采用静态的三叉链表存放。

算法思想:

申请存储哈夫曼编码串的头指针数组,申请一个字符型指针,用来存放临时的编码串;

从叶子节点开始向上倒退,若其为它双亲节点的左孩子则编码标0,否则标1;直到根节点为止,最后把临时存储编码复制到对应的指针数组所指向的内存中;

重复上述步骤,直到所有的叶子节点都被编码完;

(2)    设计一个结构体Element保存哈夫曼树中各结点的信息,包括:

Weight保存结点的权值;

Lchild保存结点的左孩子在数组中的下标;

Rchild保存结点的右孩子在数组中的下标;

Parent保存结点的双亲结点在数组中的下标。

struct Element           //哈夫曼树结点的结构体

{  

char ch;                  //字符

  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值