哈夫曼编码与译码

哈夫曼树、哈夫曼编码与译码实现(c语言) 源于一次实验课,要求实现哈夫曼树、哈夫曼编码与译码;我就直接贴实验要求和代码实现了。 注:因为当时时间有限,故其实该代码还有优化空间,且输出文件是0/1字符串文本(UTF-8)并不是ASCII码编码文件,计算压缩率除以8即可。 实验项目:哈夫曼编码与译码方法 哈夫曼编码是一种以哈夫曼树(最优二叉树,带权路径长度最小的二叉 树)为基础的基于统计学的变长编码方式。其基本思想是:将使用次数多的代 码转换... 阅读详情
  1. 从文件中读入任意一篇英文文本文件,分别统计英文文本文件中各字符(包 括标点符号和空格)的使用频率;
  2. 根据已统计的字符使用频率构造哈夫曼编码树,并给出每个字符的哈夫曼编 码(字符集的哈夫曼编码表);
  3. 将文本文件利用哈夫曼树进行编码,存储成压缩文件(哈夫曼编码文件);
  4. 计算哈夫曼编码文件的压缩率;
  5. 将哈夫曼编码文件译码为文本文件,并与原文件进行比较。
  6. 利用堆结构,优化的哈夫曼编码算法
#include<stdio.h>
#include<stdlib.h>
#define MAXLEAF 50
#define MAXNODE 2*MAXLEAF-1
#define MAXWEIGHT 10000
#define MAXBIT 100
typedef struct character
{
    char ch;
    int count=0;
}CHARACTER;             //记录原文本文件中出现的字符及相应出现次数的类型
typedef struct hnodetype
{
    int weight;
    int parent;
    int lchild;
    int rchild;
    char value;
    int i;
}HNodeType;             //哈夫曼树的结点定义
typedef struct huffcodetype
{
    int bit[MAXBIT];
    int start;
}HCodeType;             //记录每个字符哈夫曼编码
typedef struct heap
{
    HNodeType node[MAXNODE+1];
    int n;
}HEAP;                  //最小堆的类型定义
void Statistic(CHARACTER chars[],int &n);                       //统计原文本中出现的字符及其使用频率
void Display(CHARACTER chars[],int n);                          //打印原文本中出现的字符及其使用频率
void CreateHT(HNodeType huffnode[],int n,CHARACTER chars[]);    //构建哈夫曼树
void Coding(HNodeType huffnode[],HCodeType huffcode[],int n);   //构建哈夫曼编码表
void Calculate(CHARACTER chars[],int n,int chnum);              //计算压缩率
void Display(HNodeType huffnode[],HCodeType huffcode[],int n);  //打印哈夫曼编码表
void CodingFile(HNodeType huffnode[],HCodeType huffcode[],int n,int &chnum);    //将文本编码并存入文件
void Decoding(HNodeType huffnode[],int n);                                      //将编码文件译码恢复

void Insert(HEAP &heap,HNodeType item);     //向堆里插入元素
HNodeType Delete(HEAP &heap);               //取堆顶元素并删除
void CreateHT_heap(HNodeType huffnode[],CHARACTER chars[],int n,HEAP &heap);    //用最小堆优化构建哈夫曼树的过程
int main()
{
    CHARACTER chars[MAXLEAF];
    HNodeType huffnode[MAXNODE];
    HCodeType huffcode[MAXLEAF];
    HEAP heap;heap.n=0;
    int n=0,chnum=0;
    Statistic(chars,n);
    Display(chars,n);
    //CreateHT_heap(huffnode,chars,n,heap);
    CreateHT(huffnode,n,chars);
    Coding(huffnode,huffcode,n);
    Display(huffnode,huffcode,n);
    CodingFile(huffnode,huffcode,n,chnum);
    Calculate(chars,n,chnum);
    Decoding(huffnode,n);
}
void Statistic(CHARACTER chars[],int &n)    //统计原文本中出现的字符及其使用频率
{
    FILE *f=NULL;
    if((f=fopen("original.txt","r"))==NULL)
    {
        printf("Fail to open original.txt!\n");
        exit(0);
    }
    char ch;
    int i=0,j=0,flag=0;;
    fscanf(f,"%c",&ch);
    chars[i].ch=ch;
    chars[i].count++;
    //printf("%c",chars[i].ch);
    i++;
    while(ch!='#')  //从文件读入文本,以#标记结束
    {
        fscanf(f,"%c",&ch);
        flag=0;
        if(ch!='#')
        {
            for(j=0;j<i;j++)
            {
                if(ch==chars[j].ch)  //如果读入的字符已被记录,则将出现次数+1
                {
                    chars[j].count++;
                    flag=1;
                    //printf("%c",chars[j].ch);
                    break;
                }
            }
            if(flag==0)
            {
                chars[i].ch=ch;
                chars[i].count++;
                //printf("%c",chars[i].ch);
                i++;
            }
        }
    }
    n=i;
    fclose(f);
}
void CreateHT(HNodeType huffnode[],int n,CHARACTER chars[])     //构建哈夫曼树
{
    int i,j,w1,w2,x1,x2;
    for(i=0;i<2*n-1;i++)        //初始化
    {
        huffnode[i].weight=chars[i].count;
        huffnode[i].parent=-1;
        huffnode[i].lchild=-1;
        huffnode[i].rchild=-1;
        huffnode[i].value=chars[i].ch;
    }
    for(i=0;i<n-1;i++)
    {
        w1=w2=MAXWEIGHT;
        x1=x2=0;
        for(j=0;j<n+i;j++)      //寻找权值最小的两个结点
        {
            if(huffnode[j].parent==-1&&huffnode[j].weight<w1)
            {
                w2=w1;
                x2=x1;
                w1=huffnode[j].weight;
                x1=j;
            }
            else if(huffnode[j].parent==-1&&huffnode[j].weight<w2)
            {
                w2=huffnode[j].weight;
                x2=j;
            }
        }
        huffnode[x1].parent=n+i;
        huffnode[x2].parent=n+i;
        huffnode[n+i].lchild=x1;
        huffnode[n+i].rchild=x2;
        huffnode[n+i].weight=w1+w2;
    }
}
void CreateHT_heap(HNodeType huffnode[],CHARACTER chars[],int n,HEAP &heap)  //利用堆优化哈夫曼树的构建
{
    int i;
    HNodeType node1,node2;
    for(i=0;i<2*n-1;i++)
    {
        huffnode[i].weight=chars[i].count;
        huffnode[i].parent=-1;
        huffnode[i].lchild=-1;
        huffnode[i].rchild=-1;
        huffnode[i].value=chars[i].ch;
        huffnode[i].i=i;
        if(i<n)
            Insert(heap,huffnode[i]);
    }
    for(i=0;i<n-1;i++)
    {
        node1=Delete(heap);
        node2=Delete(heap);
        huffnode[node1.i].parent=n+i;
        huffnode[node2.i].parent=n+i;
        huffnode[n+i].lchild=node1.i;
        huffnode[n+i].rchild=node2.i;
        huffnode[n+i].weight=node1.weight+node2.weight;
        huffnode[n+i].i=n+i;
        Insert(heap,huffnode[n+i]);
    }
}
void Coding(HNodeType huffnode[],HCodeType huffcode[],int n)        //构建字符的哈夫曼编码表
{
    HCodeType temp;
    int p,c;
    for(int i=0;i<n;i++)
    {
        huffcode[i].start=MAXBIT-1;
        c=i,p=huffnode[i].parent;
        while(p!=-1)
        {
            if(c==huffnode[p].lchild)
                huffcode[i].bit[huffcode[i].start]=0;
            else
                huffcode[i].bit[huffcode[i].start]=1;
            c=p;
            p=huffnode[p].parent;
            huffcode[i].start--;
        }
        huffcode[i].start++;
    }
}
void Display(HNodeType huffnode[],HCodeType huffcode[],int n) //打印哈夫曼编码表
{
    for(int i=0;i<n;i++)
    {
        printf("%c: ",huffnode[i].value);
        for(int j=huffcode[i].start;j<MAXBIT;j++)
        {
            printf("%d",huffcode[i].bit[j]);
        }
        printf("\n");
    }
}
void CodingFile(HNodeType huffnode[],HCodeType huffcode[],int n,int &chnum)     //对原文本编码并将编码写入文件
{
    FILE *fo=NULL;
    FILE *fc=NULL;
    if((fo=fopen("original.txt","r"))==NULL)
    {
        printf("Fail to open original.txt!\n");
        exit(0);
    }
    if((fc=fopen("compressed.txt","w"))==NULL)
    {
        printf("Fail to open compressed.txt!\n");
        exit(0);
    }
    char ch;
    do
    {
        fscanf(fo,"%c",&ch);
        if(ch!='#')
        {
            for(int i=0;i<n;i++)
            {
                if(huffnode[i].value==ch)
                {
                    for(int j=huffcode[i].start;j<MAXBIT;j++)
                    {
                        fprintf(fc,"%d",huffcode[i].bit[j]);
                        chnum++;
                    }
                }
            }
        }
    } while (ch!='#');
    fclose(fo);
    fclose(fc);
}
void Decoding(HNodeType huffnode[],int n)   //译码
{
    FILE *fc=NULL,*fd=NULL;
    if((fc=fopen("compressed.txt","r"))==NULL)
    {
        printf("Fail to open compressed.txt!\n");
        exit(0);
    }
    if((fd=fopen("decoding.txt","w"))==NULL)
    {
        printf("Fail to open decoding.txt!\n");
        exit(0);
    }
    char code[100000];
    fscanf(fc,"%s",code);
    int i=0,j=0,temp;
    for(i=0;code[i]!='\0';i++);
    while(j<i)
    {
        temp=2*n-2;
        while(huffnode[temp].lchild!=-1&&huffnode[temp].rchild!=-1)
        {
            if(code[j]=='0')
                temp=huffnode[temp].lchild;
            else
                temp=huffnode[temp].rchild;
            j++;
        }
        fprintf(fd,"%c",huffnode[temp].value);
    }
    fclose(fc);
    fclose(fd);
}
void Display(CHARACTER chars[],int n)   
{
    int total=0;
    double f=0;
    for(int i=0;i<n;i++)
    {
        total=total+chars[i].count;
    }
    for(int i=0;i<n;i++)
    {
        printf("frequency of %c is %f\n",chars[i].ch,chars[i].count*1.0/total);
    }
}
void Calculate(CHARACTER chars[],int n,int chnum)   //计算压缩率
{
    int total=0;
    for(int i=0;i<n;i++)
    {
        total+=chars[i].count;
    }
    printf("Compression rate is %f%%",chnum*1.0/8/total*100);
}
void Insert(HEAP &heap,HNodeType item)
{
    int i;
    if(heap.n<MAXNODE-1)
    {
        i=heap.n+1;
        while(i!=1&&item.weight<heap.node[i/2].weight)
        {
            heap.node[i]=heap.node[i/2];
            i/=2;
        }
        heap.node[i]=item;
        heap.n++;
    }
}
HNodeType Delete(HEAP &heap)
{
    int parent=1,child=2;
    HNodeType item,temp;
    if(heap.n>0)
    {
        item=heap.node[1];
        temp=heap.node[heap.n--];
        while(child<=heap.n)
        {
            if(child<heap.n&&heap.node[child].weight>heap.node[child+1].weight)
                child++;
            if(temp.weight<=heap.node[child].weight) break;
            heap.node[parent]=heap.node[child];
            parent=child;
            child*=2;
        }
        heap.node[parent]=temp;
        return item;
    }
}

测试数据与运行结果:
输入格式:输入一篇英文文本,以#结尾
输入:
在这里插入图片描述

各字符出现的频率:
在这里插入图片描述

在这里插入图片描述

字符集的哈夫曼编码表:

在这里插入图片描述
在这里插入图片描述

哈夫曼编码文件:

在这里插入图片描述

哈夫曼编码文件的压缩率:
在这里插入图片描述

译码结果:

在这里插入图片描述

C++实现哈夫曼编码/译码器(数据结构) 设计一个哈夫曼编码、译码系统。对一个ASCII编码的文本文件中的字符进行哈夫曼编码,生成编码文件;反过来,可将编码文件译码还原为一个文本文件。 (1) 从文件中读入任意一篇英文短文(文件为ASCII编码,扩展名为txt); (2) 统计并输出不同字符在文章中出现的频率(空格、换行、标点等也按字符处理); (3) 根据字符频率构造哈夫曼树,并给出每个字符的哈夫曼编码; (4) 图形化输出哈夫曼树、哈... 阅读详情

相关推荐

哈夫曼编码--英语文章的编码&译码(c/c++)

一.Huffman编码与解码 (Huffman编码、二叉树) [问题描述] 对一篇英文文章(大于2000个英文字符),统计各字符出现的次数,实现Huffman编码,以及对编码结果的解码。 [基本要求] (1) 输出每个字符出现的次数和编码,其中求最小权值要求用堆实现。 (2) 在Huffman编码后,要将编码表和英文文章编码结果保存到文件中,编码结果必须是二进制形式,即0 1的信息用比特位表示,不...

Y_xy_9的博客 1万+

C语言读取文件字符串统计字母个数

C语言读取文件字符串统计字母个数

weixin_54253218的博客 1934

数据结构——哈夫曼编码译码器

题目5: 哈夫曼编/译码器 [问题描述] 利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站写一个哈夫曼码的编/译码系统。 [基本要求] 一个完整的系统应具有以下功能: 1、I:初...

莉莉莉的博客 1万+

基于C++实现的哈夫曼编码文件加密系统

题目:文件加密系统完成功能:1.对密码本进行字符的统计,以及计算其权值,存储在线性表中。2.对二叉树结构修改为三叉树结构(森林),并利用1中的线性表建立三叉树结构形成012串,与文件中字符进行比对,生成文件编码Code.txt。(XX)3.对需要解密的文件以及密码本进行比对,解密并形成解密文件decode.txt4.前端界面以及选择功能。摘要在计算机技术突飞猛进的今天,加密程序的开发越来越受到开发者的青睐。本次数据结构课程设计选择文件加密系统,系统主要使用了哈夫曼编码技术,开发了一个对英文文本文件进行加密和

毕业作品网站 771

数据结构实训——哈夫曼编码/译码器

哈夫曼(Huffman)编/译码器(限1人完成) 【问题描述】 利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站写一个哈夫曼码的编/译码系统。首先输入一段包含27个字符(包含空格)...

Tang7O的博客 7265

TOEIC托业词汇汇总(完整版)

1.appointment 约会,约定2.attendance 出席人数;出席3.cabinet 橱柜4.calendar 日历;月历;行事历5.clerk 办事员,书记6.directory 人名住址薄7.duplicte 复制;副本8.filing 归档9.in-tray 待处理文件盒10.monitor 检测;监视;追踪11.out-tray 已处理文件盒12.partition 分隔;分隔物(如墙壁等)13.postage 邮费。

weixin_39676449的博客 1万+

哈夫曼编码译码(数据结构课程设计)

1.需求分析 1.1问题描述 设计一个利用哈夫曼算法的编码和译码系统,重复地显示并处理以下项目,直到选择退出为止。 1.2 基本要求 将权值数据存放在数据文件(文件名为data.txt,位于执行程序的当前目录中)  分别采用动态和静态存储结构 初始化:键盘输入字符集大小n、n个字符和n个权值,建立哈夫曼树; 编码:利用建好的哈夫曼树生成哈夫曼编码; 输出编码; 设字符集及频度如下

u011710873的专栏 2万+

自动驾驶传感器选型实战:摄像头、激光雷达与毫米波雷达融合策略

自动驾驶感知系统的核心在于多传感器协同,而非单一技术优劣。摄像头擅长语义识别但受光照和天气制约;激光雷达提供高精度测距却面临成本、温漂与多径干扰等物理瓶颈;毫米波雷达则以全天候鲁棒性与精准测速成为安全底线的守门人。三者融合不是简单叠加,而是基于场景约束(如暴雨、强光、高速跟车)、成本边界(BOM控制)与时间窗口(量产节奏)的工程权衡。真实量产方案中,‘纯视觉’实为视觉主责+毫米波兜底,‘激光雷达上车’本质是用硬件真值加速算法迭代,而传统车企更倾向以毫米波为仲裁者协调冲突。理解这些底层原理,才能在传感器选型、

weixin_32495691的博客 276

哈夫曼编码/译码器

这次课程设计的心得体会通过实践我的收获如下:① 巩固和加深了对数据结构的理解,提高综合运用本课程所学知识的能力。② 培养了我选用参考书,查阅手册及文献资料的能力。培养独立思考,深入研究,分析问题、解决问题的能力。③ 通过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。④ 通过课程设计,培养了我严肃认真的工作作风,逐步建立正确的生产观念、经济观念和全局观念。根据我在实习中遇到得问题,我将在以后的学习过程中注意以下几点:① 认真上好专业实验课,多在实践中锻炼自己。

Bit_Dong的博客 1万+

Vivado加上VsCode让你的生活更美好

VsCode与Vivado的灵活使用 引言 ​ 现在大二了,在接触硬件描述语言。Vivado自带的编辑器实在很难用,为了能够“极客”一些,当然是去Google了一下有哪些方法可以取而代之。 ​ 网络上的答案大同小异,基本上都是用的Sublime Text.(我的学长们也几乎都是) 平时码代码的过程中,我习惯与使用VsCode,尤其是在微软收购GitHub之后,Code 简直就是神器了。于是乎…一个...

qq_39498701的博客 10万+

3GPP协议解读_NTN系列(一)_38.811_非地面网络(NTN)的背景、应用场景和信道建模

非地面网络覆盖广,对物理攻击和自然灾害有一定的抵抗性。本文根据3GPP协议对NTN网络的背景、应用场景和信道模型进行了整理。

JCMLSY的博客 4925

哈夫曼编码译码

题目 编写一个哈夫曼编码译码程序。 按词频从小到大的顺序给出各个字符(不超过30个)的词频,根据词频构造哈夫曼树,给出每个字符的哈夫曼编码,并对给出的语句进行译码。 为确保构建的哈夫曼树唯一,本题做如下限定: (1)选择根结点权值最小的两棵二叉树时,选取权值较小者作为左子树。 (2)若多棵二叉树根结点权值相等,按先后次序分左右,先出现的作为左子树,后出现的作为右子树。 生成哈夫曼编码时,哈夫曼树左分支标记为0,右分支标记为1。 【输入格式】 第一行输入字符个数n; 第二行到第n行输入相应的字符及其权值;

qq_44769557的博客 8441

基于STM32-XPC仿真平台的构架

基于STM32-XPC仿真平台的构架 xPC Target是MathWorks公司的MATLAB提供的一个基于RTW(Real-Time Workshop)体系框架的附加产品,是一种用于产品原型开发、测试和配置实时系统的PC机解决途径。xPC目标实时仿真系统能够使开发者在产品开发前进行产品原型的快速实现、测试和评估,是 Simulink 工具集下用于产品原型开发设计测试集于一体的工具箱。

sujianbonwpu的博客 4487

哈夫曼编码和译码的实现

哈夫曼编码和译码的实现 #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> using namespace std; /*哈夫曼树的应用----哈夫曼编码*/ //哈夫曼树的结点结构 typedef struct HuffmanTree{ in...

qq_42932834的博客 2181

错误代码:11300001 数据集 [xxx] 配置错误“=”附近有语法错误(原理分析)

错误代码:11300001 数据集 [1_Workshift] 配置错误“=”附近有语法错误。

码农研究僧的博客 915

MNI152 坐标空间和 fsaverage 坐标空间相互转换, 如已知fsaverage空间的坐标如何求MNI152 坐标?aparc.a2009s.annot转化到MNI152空间?

大多数神经影像学研究的结果是在体积(例如,MNI152)或表面(例如,fsaverage)坐标系中报告的。体积坐标系和表面坐标系之间的准确映射可以促进许多应用,例如将 fMRI 组分析从 MNI152 投影到 fsaverage 以进行可视化或从 fsaverage 投影静息状态 fMRI 分区对 MNI152进行新数据的体积分析。Wu et al., 2018 评估了三种在 MNI152通过模拟上述应用的 Colin27 和 fsaverage 坐标系:将组平均数据从 MNI152/Colin27 投影到

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 2966

【数据结构课程设计】哈夫曼编码译码的设计与实现

问题描述和求解方法:首先根据给定的n个字符的权值构造哈夫曼树。通过遍历此二叉树完成各字符的哈夫曼编码,另输入一组‘0’、‘1’代码构成的报文将其翻译成对应的字符信息。

DUMG 1万+

交通仿真软件:SUMO_(13).Python脚本与TraCI接口

通过TraCI接口,用户可以实现与SUMO仿真器的实时交互,获取和控制交通数据。本文档详细介绍了如何使用Python脚本与TraCI接口进行交互,包括基本的设置、数据获取和控制方法。此外,还展示了几个高级应用示例,如交通流优化、多代理系统、车辆路径规划和车辆行为模拟。这些示例可以帮助用户更好地理解如何利用TraCI接口进行复杂的交通仿真和分析。希望这些内容对您有所帮助,如果您有任何问题或需要进一步的帮助,请参考SUMO的官方文档或社区支持。

kkchenjj的博客 992

JAVA实现哈夫曼编码与译码

如题哈夫曼基本思想百度说的更好,在此不做赘余,直接上实现思路与具体代码。1.先实现哈夫曼树的基础  节点 以及 编码 (假设树已经建好)public class node { String rode =""; node left = null; node right = null; int value=1; char c; node (){} node (char c)...

nihongyeyu的博客 6669

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

7-2 哈夫曼编码译码

编写一个哈夫曼编码译码程序。 按词频从小到大的顺序给出各个字符(不超过30个)的词频,根据词频构造哈夫曼树,给出每个字符的哈夫曼编码,并对给出的语句进行译码。 为确保构建的哈夫曼树唯一,本题做如下限定: (1)选择根结点权值最小的两棵二叉树时,选取权值较小者作为左子树。 (2)若多棵二叉树根结点权值相等,按先后次序分左右,先出现的作为左子树,后出现的作为右子树。 生成哈夫曼编码时,哈夫曼树左分支标记为0,右分支标记为1。 输入格式: 第一行输入

qq_51472701的博客 4369

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

哈夫曼编码译码系统

文章目录实验目的实验设备与环境实验过程及结果分析1. 构造哈夫曼树2. SelectSmall函数3. 哈夫曼编码4. 哈夫曼译码5. 实验结果实验代码main.cppHuffman.h 实验目的 完成Huffman Tree 编码、译码系统的设计 自行设计测试数据 自行找一段本文,统计本文中每一个字符出现的频率。 理解建立Huffman Tree(编码)过程 实验设备与环境 Dev-C++ 5.11 实验过程及结果分析 1. 构造哈夫曼树 设已知n个结点的权值,根据这些权值构成森林F,森林中的每棵二

Teemos的博客 2453

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

哈夫曼编码译码器

标题数据结构课设:哈夫曼编码译码器 总结一下这次的课程设计,遇到的问题是如何解决的。 功能: 将权值数据存放在数据文件data.txt中。 键盘输入字符集大小n、n个字符和n个权值,建立哈夫曼树。 利用建好的哈夫曼树生成哈夫曼编码。 使用data.txt中的权值数据生成的哈夫曼编码,将文件Text.txt中的字符串编码保存到HuffmanCode.txt文件中。 使用data.txt中的权值数据...

ljinshuo的博客 5878

哈夫曼编码/译码的设计与实现

首先根据给定的n个字符的权值构造哈夫曼树。通过遍历此二叉树完成各字符的哈夫曼编码,另输入一组‘0’、‘1’代码构成的报文将其翻译成对应的字符信息。 废话不说直接上代码: #include #include #define UINT_iMAX 10000 using namespace std; typedef struct { char letter, *code; int weig

奋斗在路上 3万+
上一篇: 迪杰斯特拉算法——堆优化
下一篇: PTA7-2一元多项式的乘法与加法运算
TC_Ning
博客等级 码龄6年 21粉丝 13原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值