數(shù)據(jù)結(jié)構(gòu)實驗報告huffman編碼和解碼算法

數(shù)據(jù)結(jié)構(gòu)實驗報告huffman編碼和解碼算法

ID:30835297

大?。?77.82 KB

頁數(shù):7頁

時間:2019-01-03

數(shù)據(jù)結(jié)構(gòu)實驗報告huffman編碼和解碼算法_第1頁
數(shù)據(jù)結(jié)構(gòu)實驗報告huffman編碼和解碼算法_第2頁
數(shù)據(jù)結(jié)構(gòu)實驗報告huffman編碼和解碼算法_第3頁
數(shù)據(jù)結(jié)構(gòu)實驗報告huffman編碼和解碼算法_第4頁
數(shù)據(jù)結(jié)構(gòu)實驗報告huffman編碼和解碼算法_第5頁
資源描述:

《數(shù)據(jù)結(jié)構(gòu)實驗報告huffman編碼和解碼算法》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫

1、(規(guī)格為A4紙或A3紙折疊)佛山科學技術(shù)學院(用四號宋體)實驗報告(用小二號黑體)課程名稱數(shù)據(jù)結(jié)構(gòu)實驗實驗項目用Huffman樹進行編碼和解碼算法專業(yè)班級—姓名學號—指導教師成績H期(用小四號宋體)一、目的和要求1、通過本實驗,熟悉二叉樹、Huffman樹的基本概念,掌握二叉樹的存儲結(jié)構(gòu)及各種算法。2、熟悉用Huffman樹進行電文的加密與解密算法。二、實驗原理Huffman樹是一種特殊的二叉樹,其葉結(jié)點的編碼是一種前綴碼,同時,通過統(tǒng)計字符的頻度,能夠達到編碼電文的最小化。三、實驗步驟1.統(tǒng)計電文中字符的出現(xiàn)頻率。2.用統(tǒng)計頻率建立Hffman樹。3.生成前綴碼;4.建立huffm

2、an樹的解碼算法.5.用隨機輸入的電文完成編碼與解碼過程。四、源程序#include^include#includc〈string.h>#defineMAX100structHTNode{chara;intweight;intparent,lchild,rchild;}*HT;//動態(tài)分配數(shù)組存儲赫夫曼樹char**HC;intn=0,m=0;char*writc()〃存儲輸入的電文{char*p,*q;printf(,z請輸入電文(結(jié)束輸入請按enter):〃);p=(char*)malloc(MAX*sizeof(char));//申請存

3、儲輸入的屯文的空間if(!p)exit(0);q=p;scanf(〃%c〃,q);while(*q!二'){//******錄入電文,每錄入一個字符同時給電文長度計數(shù)器n加一*******n=n+l;if(n>二MAX)//判斷己中請的空間是否足夠錄入,不足則追加空間{p=(char*)realloc(q,(MAX+10)*sizeof(char));if(!p)exit(0);}q++;scanf(〃%c〃,q);}return(p);}voidweight(char*p)//求電文中各字符的概率,并將該概率當作各字符的權(quán)值{char*q,*ql,temp;structHTNo

4、de*q2;inti,j,t;ql=q=(char*)malloc(n*sizeof(char));for(;*p!二';p++,ql++)*ql=*p;//將電文存放到ql指向的空間中qi=q;for(i=0;i

5、出現(xiàn)過不同的字符的個數(shù){ql++;if(temp!=*ql){m++;//字符種類計數(shù)器加一temp=*ql;}}ql二q;HT=(structHTNodc*)malloc(2*m*sizeof(structHTNode));/*申請赫夫曼樹HT的空間,其中0號單元不用*/q2二HT+1;//*****************初女臺化赫夫曼樹HT*********************for(i=l;i〈二n;)t=0;for(q2-〉a=*ql;*ql二二q2-〉a;ql++)t++;i++;}q2-〉weight二(int)(t*100/n);q2->lchild=0;q2->

6、parent二0;q2->rchild=0;q2++;}for(i=m+l;i<=2*m-l;i++,q2++){q2->lchild=0;q2->parcnt二0;q2->rchild=0;q2-〉weight二0;}free(q);}voidSelect(intt,int*sl,int*s2){/************在HT[1,t]選擇parent為0且weight最小的兩個結(jié)點,其序號分別為si和s2o**********************/inttemp,j;for(j=l;j<=t;j++)if(HT[jJ.parent==0){*sl二j;for(j=j+l;j

7、<=t;j++)if(HT[j].parcnt==0){*s2二j;break;}break;}if(HT[*sl].weight>HT[*s2].weight)temp=*s2;*s2=*sl;*sl二temp;for(;t>0;t-一)if(t!=*sl&&t!=*s2)if(HT[t]?parent==0)if(HT[*sl].weight〈二HT[t].weight&&HT[*s2]?weight>HT[t].weight)*s2二t;elseif

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

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

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
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)系客服處理。