拓展四(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]);
}