1 / 9
文档名称:

哈夫曼编码译码程序源代码.doc

格式:doc   大小:59KB   页数:9页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

哈夫曼编码译码程序源代码.doc

上传人:86979448 2017/12/3 文件大小:59 KB

下载得到文件列表

哈夫曼编码译码程序源代码.doc

相关文档

文档介绍

文档介绍:《数据结构》课程设计
哈夫曼编码译码程序源代码
#include <>
#include <>
#include <>
#include <>
#include <>
#include <>
#include <>
const int UINT_MAX=10000;
typedef struct
{
int weight;
int parent,lchild,rchild;
}HTNode,* HuffmanTree; //动态分配数组存储赫夫曼树  
typedef char **HuffmanCode; //动态分配数组存储赫夫曼编码表
//--------------------全局变量-----------------------
HuffmanTree HT;
HuffmanCode HC;
int *w,i,j;
const int n=26;
char *z;
int flag=0;
int numb=0;
// -----------------求赫夫曼编码---------------------
int min(HuffmanTree t,int i)
{ // 此函数将要被void select()调用
int j,flag;
int k=UINT_MAX; // 取k为不小于可能的值
for(j=1;j<=i;j++)
if(t[j].weight<k&&t[j].parent==0)
k=t[j].weight,flag=j;
t[flag].parent=1;
return flag;
}
//--------------------slect函数----------------------
void select(HuffmanTree t,int i,int &s1,int &s2)
{ // s1为最小的两个值中序号小的那个
int j;
s1=min(t,i);
s2=min(t,i);
if(s1>s2)
{
j=s1;
s1=s2;
s2=j;
}
}
// --------------------------------------
void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int *w,int n)
{ // w存放n个字符的权值(均>0),构造赫夫曼树HT,并求出n个字符的赫夫曼编码HC
int m,i,s1,s2,start;
int c,f;
HuffmanTree p;
char *cd;
if(n<=1)
return;//检测结点数是否可以构成树
m=2*n-1;
HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode)); // 0号单元未用
for(p=HT+1,i=1;i<=n;++i,++p,++w)
{
p->weight=*w;
p->parent=0;
p->lchil