资源简介
字符文件统计字符出现频度,构造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
- 上一篇:矩阵运算C语言实现
- 下一篇:北京邮电大学大三下计算机图形学作业一
相关资源
- 原创c++二叉树抽象数据类型实现
- B树 C语言实现
- 自适应霍夫曼编码(C++)
- 输出二叉树中某结点的双亲结点
- 克鲁斯卡尔最小生成树算法
- 二叉树已知后序和中序遍历求前序遍
- 动态添加、删除树形控件的节点,获
- 二叉树实现
- 数据结构C语言课程设计平衡二叉树
- 数据结构 哈夫曼树C语言源代码
- 赫夫曼树的构建及赫夫曼编码C语言源
- 哈夫曼树的建立(Huffman Tree C语言实现
- 二叉树的插入C语言
- c++实现决策树分类算法(内附测试数
- 数据结构课程设计|利用邻接矩阵创建
- C++实现哈夫曼树及哈夫曼编码.rar
- 数据结构c语言版建立二叉树,中序非
- 二叉排序树的建立、插入、查找和删
- c++实现哈夫曼树的编译码
- c++版创建并输出二叉树完整代码
- STL模型布尔运算的实现论文 郭开波
- 博弈树树的c实现
- 赫夫曼树哈夫曼树 算法 编码 源代
- 决策树实现算法C语言编写
- 哈弗曼树的建立 C++代码
- 图形化的最小生成树C++原代码
- 带测试用例的平衡树算法
- 数据结构二叉树代码
- VC++和OpenGL实现八叉树分割
- 按层次输出二叉树
评论
共有 条评论