資源簡介
這是大二時的數據結構的課設,今天與大家分享。可以讀寫文件,編碼譯碼,以及對輸入的異常處理。

代碼片段和文件信息
#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
- 上一篇:Allegro2AD教程及批處理.rar
- 下一篇:基于ARM9的指紋識別門禁系統
評論
共有 條評論