• 大小: 2.87MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-09-08
  • 语言: 其他
  • 标签: huffman  数据结构  

资源简介

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

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
using namespace std;

typedef struct {
int weight;
int parentlchildrchild;
}HTNode;
typedef char **HuffmanCode;

HTNode HT[5000];
HuffmanCode HC;
char *cd;
#define code_LEN 10000
char Letter[5000]c;
int Fre_Letter[5000];
int Num_Letter;
int Hr[5000];
int size=0;
int HeapLength;

void init()
{
int findi;
Num_Letter=0;
FILE *fpin;
fpin = fopen(“a.txt““r“);
while((c = fgetc(fpin))!= EOF)
{
find=0;
for (i=1;i<=Num_Letter;i++)
{
if (Letter[i]==c)
{
Fre_Letter[i]++;
find=1;
break;
}
}
if (find==0)
{
Num_Letter++;
Letter[Num_Letter]=c;
Fre_Letter[Num_Letter]=1;
}
}
fclose(fpin);
for (i=1;i<=Num_Letter;i++)
cout<}

void HeadAdjust(int s int m) //堆排序中的节点维护
{
int rcj;
rc = Hr[s];
for (j=2*s; j<=m; j*=2)
{
if (j if (HT[rc].weight<=HT[Hr[j]].weight) break;
    Hr[s] = Hr[j]; s= j;
}
Hr[s] = rc;
}
void HuffmanCoding(int *wint n){

int ms1is2;
if (n<=1) return;
m=2*n-1;
HT[0].weight=23423432;
for (i=1;i<=n;i++)
{
HT[i].weight = w[i];
HT[i].lchild = NULL;
HT[i].rchild = NULL;
HT[i].parent = NULL;
}
for (i=n+1;i<=m;i++)
{
HT[i].weight=0;
HT[i].lchild = NULL;
HT[i].rchild = NULL;
HT[i].parent = NULL;
}
for (i=1;i<=n;i++)
        Hr[i]=i;
    for(i = n/2; i>0; i--)    //堆排序预处理
   HeadAdjust(in);
for (i=n+1;i<=m;i++)
{
s1 = Hr[1];
        Hr[1] = 0;
HeadAdjust(1n);
s2 = Hr[1];
HT[i].weight = HT[s1].weight+HT[s2].weight;
HT[i].lchild = s1;
HT[i].rchild = s2;
HT[s1].parent = i;
HT[s2].parent = i;
Hr[1] = i;
HeadAdjust(1n);
}
HC=(HuffmanCode)malloc(Num_Letter*code_LEN*5*sizeof(char));
cd=(char *)malloc(5*code_LEN*sizeof(char));
cd[n-1]=‘\0‘;
for (i=1;i<=n;i++)
{
    int start=n-1;
    int cf;
for (c=if=HT[i].parent;f!=0;c=ff=HT[f].parent)
if (HT[f].lchild==c)
cd[--start]=‘0‘;
else cd[--start]=‘1‘;
HC[i]=(char *)malloc((n-start)*sizeof(char));
strcpy(HC[i]&cd[start]);
}
free(cd);
}

void PrintHuffmanCode()
{
FILE *fpin*fpout;
int i;
for (i=1;i<=Num_Letter;i++)
cout< fpin = fopen(“a.txt““r“);
fpout= fopen(“b.txt““w“);
cout< while((c = fgetc(fpin))!= EOF)
{
for (i=1;i<=Num_Letter;i++)
if (Letter[i]==c)
{
fprintf(fpout“%s“HC[i]);
break;
}
}
fclose(fpin);
    fclose(fpout);
}


void GetHuffmanCode()
{
    char *cd;
    int tiflag;
    t=0;
FILE *fpin*fpout;
cd=(char *)malloc(code_LEN*sizeof(char));
fpout= fopen(“d.txt““w“);
fpin = fopen(“b.txt““r“);
while((c = fgetc(fpin))!= EOF)
{
        cd[t]=c;
flag=0;
cd[t+1]=‘\0‘;
        for (i=1;i<=Num_Letter;i++)
            if (strcmp(cdHC[i])==0)
     

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2012-03-06 16:32  7Huffman编码与解码\
     文件          45  2011-12-22 20:19  7Huffman编码与解码\1.txt
     文件          44  2011-12-22 20:19  7Huffman编码与解码\2.txt
     文件          45  2011-12-22 20:20  7Huffman编码与解码\3.txt
     目录           0  2012-03-06 16:32  7Huffman编码与解码\7\
     文件        3341  2011-12-21 11:05  7Huffman编码与解码\7.dsp
     文件         510  2011-12-21 11:05  7Huffman编码与解码\7.dsw
     文件       41984  2011-12-21 11:05  7Huffman编码与解码\7.ncb
     文件       48640  2011-12-21 11:05  7Huffman编码与解码\7.opt
     文件        2258  2011-12-21 11:05  7Huffman编码与解码\7.plg
     文件        3351  2011-12-21 22:42  7Huffman编码与解码\70.cpp
     文件        3353  2011-12-22 21:55  7Huffman编码与解码\70.dsp
     文件         512  2011-12-22 21:56  7Huffman编码与解码\70.dsw
     文件       33792  2011-12-22 21:56  7Huffman编码与解码\70.ncb
     文件       48640  2011-12-22 21:56  7Huffman编码与解码\70.opt
     文件        1099  2011-12-22 21:55  7Huffman编码与解码\70.plg
     文件        3341  2011-12-21 19:07  7Huffman编码与解码\7\7.dsp
     文件         508  2011-12-21 19:14  7Huffman编码与解码\7\7.dsw
     文件      912145  2011-12-21 22:48  7Huffman编码与解码\7\7.exe
     文件       41984  2011-12-21 19:14  7Huffman编码与解码\7\7.ncb
     文件        5489  2011-12-21 22:48  7Huffman编码与解码\7\7.o
     文件       48640  2011-12-21 19:14  7Huffman编码与解码\7\7.opt
     文件         236  2011-12-21 19:14  7Huffman编码与解码\7\7.plg
     文件        4648  2011-12-22 11:39  7Huffman编码与解码\7\71.cpp
     文件        3353  2011-12-22 19:58  7Huffman编码与解码\7\71.dsp
     文件         510  2011-12-22 19:58  7Huffman编码与解码\7\71.dsw
     文件      912147  2011-12-21 23:41  7Huffman编码与解码\7\71.exe
     文件       41984  2011-12-22 19:58  7Huffman编码与解码\7\71.ncb
     文件        5081  2011-12-21 23:41  7Huffman编码与解码\7\71.o
     文件       48640  2011-12-22 19:58  7Huffman编码与解码\7\71.opt
     文件         238  2011-12-22 19:58  7Huffman编码与解码\7\71.plg
............此处省略41个文件信息

评论

共有 条评论