哈夫曼編碼與解碼C語言.doc

哈夫曼編碼與解碼C語言.doc

ID:57415370

大?。?7.50 KB

頁數(shù):7頁

時間:2020-08-16

哈夫曼編碼與解碼C語言.doc_第1頁
哈夫曼編碼與解碼C語言.doc_第2頁
哈夫曼編碼與解碼C語言.doc_第3頁
哈夫曼編碼與解碼C語言.doc_第4頁
哈夫曼編碼與解碼C語言.doc_第5頁
資源描述:

《哈夫曼編碼與解碼C語言.doc》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、#include"stdio.h"/*I/O函數(shù)*/#include"stdlib.h"/*其他庫函數(shù)聲明*/intnum;/*記錄結(jié)點數(shù)*/intcodenum=0;/*已經(jīng)獲得的編碼個數(shù)*/charfilename[20]="";/*存儲文件名*/typedefstruct/*哈夫曼結(jié)點存儲結(jié)構(gòu)*/{charch;/*結(jié)點字符*/intw;/*結(jié)點權(quán)值*/intlchild,rchild;/*左右孩子的數(shù)組下標(biāo)*/}HafuNode,*HafuTree;HafuTreeht;/*聲明一個指向樹結(jié)點到指針*/

2、typedefstruct{charch;/*葉子結(jié)點字符*/charcodestr[20];/*字符編碼*/}HafuCode;HafuCodecode[27];/*用于存放對應(yīng)字符到哈夫曼編碼*/voidInitHafuArry(){/*導(dǎo)入文件計算權(quán)值,生成只含有葉子結(jié)點的HafuNode數(shù)組*/intj,i,k;HafuNodetmpht;FILE*fp;/*定義一指向打開文件的指針*/charch;/*用于存儲一個字母*/charlocation[30]="D:\";ht=(HafuTree)mal

3、loc(53*sizeof(HafuNode));/*為哈夫曼數(shù)分配內(nèi)存空間*/if(ht==NULL)return;for(i=0;i<53;i++)/*初始化所以的數(shù)據(jù)單元,每個單元自成一棵樹*/{ht[i].w=0;/*權(quán)值初始化為0*/ht[i].lchild=ht[i].rchild=-1;/*左右子為空*/}num=0;printf("Filename:");scanf("%s",filename);strcat(location,filename);fp=fopen(location,"r");i

4、f(!fp)/*返回1時即存在文件*/{printf("OpenError");return;}while(!feof(fp))/*沒到結(jié)尾時返回0*/{ch=fgetc(fp);if(ch==''

5、

6、ch<='z'&&ch>='a'

7、

8、ch<='Z'&&ch>='A'){printf("%c",ch);if(ch=='')ch='#';for(j=0;j

9、權(quán)值加1*/ht[num].w++;num++;}else{ht[j].w++;/*將已有字符權(quán)值加1*/}}}fclose(fp);printf("");for(i=0;i

10、]=ht[k];ht[k]=tmpht;}}}intCreateHafuman(HafuTreeht){/*在數(shù)組ht中生成哈夫曼數(shù),返回根節(jié)點下標(biāo)*/inti,k,j,root;HafuNodehfnode;codenum=0;for(i=0;ik;

11、j--)/*將新結(jié)點插入有序數(shù)組中*/{if(ht[j].w>hfnode.w){ht[j+1]=ht[j];}elsebreak;}ht[j]=hfnode;root=j;/*一直跟隨新生成的結(jié)點,最后新生成的結(jié)點為根結(jié)點*/}returnroot;}voidGetHafuCode(HafuTreeht,introot,char*codestr){/*ht是哈夫曼樹,root是根結(jié)點下標(biāo),codestr是來暫時存放葉子結(jié)點編碼的,一開始為空*/FILE*out;intlen,i;FILE*fp;/*定義一指向

12、打開文件的指針*/charch;/*用于存儲一個字母*/charlocation[30]="D:\";if(ht[root].lchild==-1){/*遇到遞歸終點是葉子結(jié)點記錄葉子結(jié)點的哈夫曼編碼*/code[codenum].ch=ht[root].ch;strcpy(code[codenum].codestr,codestr);codenum++;}else/*不是終點則繼續(xù)

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。