C语言 数据结构 哈夫曼编码

本文介绍如何使用C语言实现哈夫曼编码,包括主要的`main.cpp`、`huffman.cpp`、`queue.cpp`、`huffman.h`和`queue.h`等文件,涉及数据结构和树形结构的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

拓展四(2)


哈夫曼编码

main.cpp
#include <stdio.h>
#include <stdlib.h>
#include "huffman.h"

int main(void)
{
   
    //生成编码/解码规则的原材料(通常较为广泛)
    char ch1[100]={
   "BiliBili Cheers. o."};
    //待编码的字符串
    char ch2[100]={
   "BiliBili Cheerio. s."};
    //待解码的字符串
    char ch3[100]={
   "001100111000110011101111110011011000000010110110101110111101001110"};

    htTree *codeTree = buildTree(ch1);

    hlTable *codeTable = buildTable(codeTree);

    encode(codeTable, ch2);

    decode(codeTree, ch3);

    printf("\n\n");

    system("pause");

    printf("\n\n");

    return 0;
}

huffman.cpp
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "huffman.h"
#include "queue.h"

htTree *buildTree(char *inputString)
{
   
    //记录字符出现次数的数组
    int *probability = (int *)malloc(sizeof(int) * 256);

    //上述数组初始化
    for(int i=0; i < 256; i++)
    {
   
        probability[i] = 0;
    }

    //统计待编码的字符串中各个字符出现的次数
    for(int j=0; '\0' != inputString[j]; j++)
    {
   
        probability[(unsigned char)inputString[j]]++;
    } //数组和字符串组合使用 一次循环统计完毕

    pQueue *huffmanQueue; //队列的头指针
    initPQueue(&huffmanQueue); //初始化队列

    //填充队列
    for(int k=0; k < 256; k++)
    {
   
        //出现的字符插入至队列中
        if(0 != probability[k])
        {
   
            htNode *aux = (htNode *)malloc(sizeof(htNode));
            aux->left = NULL;
            aux->right = NULL;
            aux->symbol = (char)k;

            //参数:队列 赫夫曼树结点 赫夫曼树结点优先权
            addPQueue(&huffmanQueue, aux, probability[k]);
        }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值