题目描述
利用哈夫曼编码进行通信,可以压缩通信的数据量,提高传输效率,缩短信息的传输时间,还有一定的保密性。现在要求编写一程序模拟传输过程,实现在发送前将要发送的字符信息进行编码,然后进行发送,接收后将传来的数据进行译码,即将信息还原成发送前的字符信息。
现在有两个功能:
1 发送者:将待传送的字符信息转化为哈夫曼编码。
2 接受者:将接受的编码信息进行译码,得到还原成发送前的字符信息。
输入
加粗样式 输入一个小写字母组成的字符串S(strlen(S)<=1e3),表示待传送的字符串。
输出
输出为两行,第一行将输入的字符串转化为哈夫曼编码的最短长度。第二行输出哈夫曼编码译码的长度。
#include<iostream>
#include<string.h>
using namespace std;
#define inf 0x3f3f3f3f
typedef struct LNode
{
struct LNode *next;
int num;
}LNode, *LinkList;
typedef struct
{
int n;
char a;
int weight;
}DataType;
typedef struct {
DataType data;
int parent, lchild, rchild;
}HTNode, *HuffmanTree;
void Select(HuffmanTree &HT, int m, int &s1, int &s2)
{
s1 = s2 = 0;
HT[s1].data.weight = inf;
HT[s2].data.weight = inf;
for (int i = 1; i <= m; i++)
{
if (HT[i].data.weight <= HT[s1].data.weight