• 大小: 196KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-19
  • 语言: C/C++
  • 标签: Huffman    

资源简介

字符文件统计字符出现频度,构造Huffman 树,编制Huffman编码,并将给定字符文件编码,生成编码文件;再将给定编码文件解码,生成字符文件

资源截图

代码片段和文件信息

#include“head.h“
#include“head2.h“
#include“head3.h“
#include
#include
#include
#include
using namespace std;
//*********挑选两个权值小的节点****************//
int select(element hufftree[ ]int signint m)
{
    int i=0;
int temp temp1temp2=0;;
for(i=0;i<2*m-1;i++)
{
if(hufftree[sign].parent==-1)
{
temp2++;
temp1=sign;
temp=hufftree[sign].weight;
}
if(temp2==1)
break;
sign++;
}
for(i=0;i<2*m-1;i++)
{
if( hufftree[i].weight < temp && hufftree[i].parent==-1 && hufftree[i].weight>0 )

temp1=i;
temp=hufftree[i].weight;
}
}
return temp1;
}
//////////////////////////////////////////////////////
//*****建立一棵哈夫曼树*******************//
/////////////////////////////////////////////////////
void huffman( element hufftree[ ]abcd letter[ ]int m )
{
int i1i2kisign;
ofstream outfile(“t2.txt“ios::out);
for(i=0;i<2*m-1;i++)
{
hufftree[i].parent=-1;
hufftree[i].lchild=-1;
hufftree[i].rchild=-1;
}
for(i=0;i {
hufftree[i].zimu=letter[i].character;
hufftree[i].weight=letter[i].number;
}
sign=0;
for(k=m;k<2*m-1;k++)
{
i1=select(hufftree signm);
hufftree[i1].parent=k;
hufftree[k].lchild=i1;
sign++;
i2=select(hufftreesignm);
hufftree[i2].parent=k;
hufftree[k].rchild=i2;
hufftree[k].weight=hufftree[i1].weight+hufftree[i2].weight;
sign++;
}
outfile< for(i=0;i {   
if(hufftree[i].zimu==‘ ‘)
{
outfile<<‘_‘;
outfile< outfile< }

else
{
outfile< outfile< outfile< }
}
cout<<“*注意*:“< cout<<“    压缩文件的配置文件已经保存到t2.txt中,“< cout<<“    不要轻易的删除,否则将无法还原文件!“<}
/////////////////////////////////////////
///////////////////////////////////////
//压缩文件,并把文件保存到二进制的文件里
///////////////////////////////////
/////////////////////////////////
int yasuo(element hufftree[] int mnode flag[]bit bitvec[])
{
char ch;
int in=7;
int jstare=0;
ifstream infile(“f1.txt“ios::in);
ofstream outfile1(“ys.dat“ios::out);
bitset<8>temp4;
while(infile.get(ch))
{
for(j=0;j
if(hufftree[j].zimu==ch)
{
for(i=flag[j].sign-1;i>=0; i--)
{    
temp4[n]=bitvec[j].bitvec2[i];
n=n--;
if(n==-1)
{
outfile1.write((char *)&temp41);
stare++;
n=7;
}


}
}
}
}
cout< if(n!=7)
{
outfile1.write((char *)&temp41);
stare++;
}
outfile1.close();
cout<<“压缩的文件应经已二进制的方式保存到ys.dat文件之中!“< return stare;
}
/////////////////
//对每一个字母进行哈夫曼编码///
//////////
void bianma(element hufftree[]int mnode flag[]bit bitvec[])
{
int i;
int jtemp=0temp1=0temp2=0;
for(j=0;j {
flag[j].sign=0;
temp=0;
temp2=j;
for(i=m;i<2*m-1;i++)
{
if(hufftree[i].lchild==temp2)
{  

temp2=i;
b

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2008-11-23 20:50  06082130\
     文件      269824  2008-01-05 20:20  06082130\06082130 程序设计报告.doc
     目录           0  2008-01-12 18:54  06082130\Huffman\
     文件           2  2007-12-31 11:29  06082130\Huffman\bitset.h
     文件        5365  2008-01-02 16:11  06082130\Huffman\hafu.cpp
     文件         179  2008-01-01 11:52  06082130\Huffman\head.h
     文件          75  2007-12-29 13:47  06082130\Huffman\head2.h
     文件          73  2008-01-02 16:06  06082130\Huffman\head3.h
     文件        2309  2008-01-02 16:13  06082130\Huffman\main.cpp

评论

共有 条评论