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

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

ID:57092084

大?。?8.00 KB

頁數(shù):10頁

時間:2020-08-02

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

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

1、哈夫曼編碼與解碼C語言精品文檔#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ù)組下標*/}HafuNode,*HafuTree;HafuTreeht;/*

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

3、(HafuTree)malloc(53*sizeof(HafuNode));/*為哈夫曼數(shù)分配內(nèi)存空間*/if(ht==NULL)return;for(i=0;i<53;i++)/*初始化所以的數(shù)據(jù)單元,每個單元自成一棵樹*/收集于網(wǎng)絡,如有侵權(quán)請聯(lián)系管理員刪除精品文檔{ht[i].w=0;/*權(quán)值初始化為0*/ht[i].lchild=ht[i].rchild=-1;/*左右子為空*/}num=0;printf("Filename:");scanf("%s",filename);strcat(location,

4、filename);fp=fopen(location,"r");if(!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、*找到新字符*/{ht[num].ch=ch;/*將新字符存入并將權(quán)值加1*/ht[num].w++;num++;}else{ht[j].w++;/*將已有字符權(quán)值加1*/}收集于網(wǎng)絡,如有侵權(quán)請聯(lián)系管理員刪除精品文檔}}fclose(fp);printf("");for(i=0;i

10、(k!=i)/*如果權(quán)值最小的不是第i個元素則交換位置,將小的放到前面*/{tmpht=ht[i];ht[i]=ht[k];ht[k]=tmpht;}}}intCreateHafuman(HafuTreeht){/*在數(shù)組ht中生成哈夫曼數(shù),返回根節(jié)點下標*/inti,k,j,root;HafuNodehfnode;codenum=0;for(i=0;i

11、.w;hfnode.lchild=k-1;hfnode.rchild=k;for(j=num+i;j>k;j--)/*將新結(jié)點插入有序數(shù)組中*/{if(ht[j].w>hfnode.w){收集于網(wǎng)絡,如有侵權(quán)請聯(lián)系管理員刪除精品文檔ht[j+1]=ht[j];}elsebreak;}ht[j]=hfnode;root=j;/*一直跟隨新生成的結(jié)點,最后新生成的結(jié)點為根結(jié)點*/}returnroot;}voidGetHafuCode(HafuTreeht,introot,char*codestr){/*ht是哈夫曼

12、樹,root是根結(jié)點下標,codestr是來暫時存放葉子結(jié)點編碼的,一開始為空*/FILE*out;intlen,i;FILE*fp;/*定義一指向打開文件的指針*/charch;/*用于存儲一個字母*/charlocation[30]="D:\";if(ht[root].lchild==-1){/*遇到遞歸終點是葉子結(jié)點記錄葉子結(jié)點的哈夫曼編碼*/code[coden

當前文檔最多預覽五頁,下載文檔查看全文

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

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