• 大小: 715KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-01
  • 语言: 其他
  • 标签: 哈夫曼树  

资源简介

这是大二时的数据结构的课设,今天与大家分享。可以读写文件,编码译码,以及对输入的异常处理。

资源截图

代码片段和文件信息

#include 
#include 
#include 

/*-------------------------------------------------------------------------------------------------------------------*/
struct HtNode                           /*哈夫曼树结点的结构*/
{
int ww; /*权值*/
int parentllinkrlinkrlparent; /*rlparent是记录该结点是父结点的左孩子还是右孩子*/
char a;                             /*记录编码字符的信息*/
};
typedef struct HtNode * PHtNode;
struct HtTree /*哈夫曼树结构*/
{
int m; /*外部结点的个数*/
int root; /*哈夫曼树在数组中的下标*/
struct HtNode *ht; /*存放2*m-1个结点的数组*/
};
typedef struct HtTree * PHtTree; /*哈夫曼树类型的指针类型*/



/*-------------------------------------------------------------------------------------------------------------------*/



/************************************************************************/
/*函数的功能:创建哈夫曼树,将电文编码                                  */
/*函数的参数:1、哈夫曼树叶子结点的个数  2、权值的数组 3、编码字符的信息*/
/*函数的返回值:返回指向数组的指针                                      */
/************************************************************************/
PHtTree huffman(int mint *wchar *p)              /*构造具有m个外部结点的哈夫曼树*/
{
PHtTree pht;
int ijx1x2m1m2;
pht=(PHtTree)malloc(sizeof(struct HtTree));    /*分配哈夫曼树空间*/
if(pht==NULL)
{
printf(“Out of space!!\n“);
return pht;
}
pht->ht=(struct HtNode *)malloc(sizeof(struct HtNode)*(2*m-1)); /*分配ht数组空间*/
if(pht->ht==NULL)
{
printf(“Out of space!!\n“);
return pht;
}

for(i=0;i<2*m-1;i++) /*置ht数组初态*/
{
pht->ht[i].llink=-1;
pht->ht[i].rlink=-1;
pht->ht[i].parent=-1;
pht->ht[i].rlparent=-1;
if(i {
pht->ht[i].ww=w[i];      /*各点的权值*/
pht->ht[i].a=p[i];       /*各点的字符信息*/
}
else
pht->ht[i].ww=-1;        /*剩余的结点赋值为-1*/
}


for(i=0;i {
m1=m2=32767; /*相关变量赋初值*/
x1=x2=-1;
for(j=0;j {
if(pht->ht[j].wwht[j].parent==-1) /*x1中存放最小权的无父结点的结点下标*/
{
m2=m1; /*x2中存放第二小权的无父结点的结点下标*/
x2=x1;
m1=pht->ht[j].ww;
x1=j;
}
else if(pht->ht[j].wwht[j].parent==-1)
{
m2=pht->ht[j].ww;
x2=j;
}
}

pht->ht[x1].parent=m+i; /*构造内部结点*/
pht->ht[x1].rlparent=0;                 /*该结点是父结点的左孩子*/
pht->ht[x2].parent=m+i;                 /*该结点的父结点的位置,即数组下标*/
pht->ht[x2].rlparent=1; /*该结点是父结点的右孩子*/
pht->ht[m+i].ww=m1+m2; /*父结点的权值是左右孩子的权值之和*/
pht->ht[m+i].llink=x1; /*将父结点的llink的值赋上左孩子所在的数组下标*/
pht->ht[m+i].rlink=x2; /*将父结点的rlink的值赋上右孩子所在的数组下标*/
}
pht->root=2*m-2;                            /*根结点的位置在数组的最后一个元素*/
printf(“哈夫曼树创建成功!!\n哈夫曼树在数组中的存储形式为:\n“);                                
for(i=0;i<2*m-1;i++)                       /*输出哈夫曼树中的数组所保存的权值*/
{
printf(“  %d “pht->ht[i]);
}
printf(“\n编码成功!\n“);
return pht;                                                    
}
/*--------------------------------------------

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     634880  2010-07-26 18:47  哈夫曼树.doc

     文件      32837  2010-07-14 12:16  哈夫曼树\Debug\huffamn.obj

     文件     184772  2010-07-13 12:59  哈夫曼树\Debug\huffamn.pch

     文件     492544  2010-07-13 22:20  哈夫曼树\Debug\huffamn.pdb

     文件       2560  2010-07-13 13:10  哈夫曼树\Debug\huffamn.suo

     文件      33792  2010-07-14 12:16  哈夫曼树\Debug\vc60.idb

     文件      53248  2010-07-14 12:16  哈夫曼树\Debug\vc60.pdb

     文件     204869  2010-07-14 12:16  哈夫曼树\Debug\哈夫曼树.exe

     文件     225368  2010-07-14 12:16  哈夫曼树\Debug\哈夫曼树.ilk

     文件     184772  2010-07-13 12:39  哈夫曼树\Debug\哈夫曼树.pch

     文件     549888  2010-07-14 12:16  哈夫曼树\Debug\哈夫曼树.pdb

     文件       3072  2010-07-14 08:00  哈夫曼树\Debug\哈夫曼树.suo

     文件         27  2010-07-13 22:06  哈夫曼树\dianwen.txt

     文件      20444  2010-07-14 08:12  哈夫曼树\huffamn.c

     文件       3411  2010-07-14 08:06  哈夫曼树\huffamn.dsp

     文件      50176  2010-07-14 08:10  哈夫曼树\huffamn.ncb

     文件      48640  2010-07-14 08:06  哈夫曼树\huffamn.opt

     文件          0  2010-07-14 08:10  哈夫曼树\huffamn.plg

     文件       4305  2010-07-11 17:01  哈夫曼树\哈夫曼树.dsp

     文件        524  2010-07-11 16:12  哈夫曼树\哈夫曼树.dsw

     文件      50176  2010-07-14 13:43  哈夫曼树\哈夫曼树.ncb

     文件      48640  2010-07-14 13:43  哈夫曼树\哈夫曼树.opt

     文件        898  2010-07-14 12:16  哈夫曼树\哈夫曼树.plg

    ..A..H.      6144  2010-07-11 20:16  哈夫曼树\哈夫曼树.suo

     目录          0  2010-07-14 08:11  哈夫曼树\Debug

     目录          0  2010-07-14 13:43  哈夫曼树

----------- ---------  ---------- -----  ----

              2835987                    26


评论

共有 条评论