【课程设计】 哈夫曼树的应用:字符串的加密与解密

本文介绍了如何使用哈夫曼树进行字符串的加密和解密。首先,根据字符频度构建哈夫曼树,然后生成哈夫曼编码。用户可以输入字符串进行加密,加密后的哈夫曼编码可再次解密回原始字符串。程序包括初始化字符集、构建哈夫曼树、编码和解码四个步骤,并提供了完整的C++代码实现。
摘要由CSDN通过智能技术生成

一.实验任务

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

字符空格 A  B  C D   E F  G   H  I  J  K  L M

频度 180 64 13 23  32103 2215   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  8025 7  18 2  16  1

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

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

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

(3)输出解密字符串。

 

二.功能

(1)输入一串字符,建立哈夫曼树

(2)得到哈夫曼编码

(3)实现哈夫曼译码

三.基本思想

(1)初始化:输入字符以及其频度

构造哈夫曼树

构造哈夫曼树基本思想:

(2)加密:输入字符,输出哈夫曼编码

(3)解密::输入哈夫曼编码,输出字符代码

(4)退出

四.数据结构与算法分析

应用哈夫曼树

该哈夫曼树采用双亲孩子表示法存储,构造哈夫曼树的叶子结点有n个,合并次数n-1,则森林中公有2n-1棵树

1.哈夫曼树结点构造

定义节点结构体,结构体类型名为huffnode

typedef struct { 

    char data;    //节点值

    int weight;   //结点的权重

    int parent;   //双亲结点

    int lchild;   /保存该结点的左孩子结点右孩子结点在数组中的位置

    int rchild;   //保存该结点的右孩子结点右孩子结点在数组中的位置

} huffnode;

2.哈夫曼编码结构,结构体类型名为huffcode

typedef struct {     

charcd[MAX];   //存放哈夫曼编码

intstart;      //编码的起始下标

}huffcode;   

3.主函数


五.完整程序代码

#include<iostream.h>

#include<stdio.h>

#include<malloc.h>

#define MAX 26   //节点允许的最大数量26

 

/*哈夫曼树结点结构*/

typedef struct {  //定义一个新数据类型即结点结构

       char data;    //节点值

       int weight;   //结点的权重

       int parent;   //保存该结点的双亲结点在数组中的下标

       int lchild;   //保存该结点的左孩子结点在数组中的位置

       int rchild;   //保存该结点的右孩子结点右孩子结点在数组中的位置

} huffnode;    //定义结构体类型名为huffnode

 

/*哈夫曼编码结构*/

typedef struct {     //定义保存一个叶子结点的哈夫曼树编码的结构

       char cd[MAX];   //存放哈夫曼编码

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值