




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、華北水利水電大學(xué) 數(shù)據(jù)結(jié)構(gòu) 實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)三 樹(shù)的應(yīng)用一、 實(shí)驗(yàn)題目:樹(shù)的應(yīng)用哈夫曼編碼二、 實(shí)驗(yàn)內(nèi)容:利用哈夫曼編碼進(jìn)行通信可以大大提高信道的利用率,縮短信息傳輸?shù)臅r(shí)間,降低傳輸成本。根據(jù)哈夫曼編碼的原理,編寫(xiě)一個(gè)程序,在用戶輸入結(jié)點(diǎn)權(quán)值的基礎(chǔ)上求哈夫曼編碼。從鍵盤輸入若干字符及每個(gè)字符出現(xiàn)的頻率,將字符出現(xiàn)的頻率作為結(jié)點(diǎn)的權(quán)值,建立哈夫曼樹(shù),求出各字符的哈夫曼編碼。要求:1 輸出存放哈夫曼樹(shù)的數(shù)組HT的初態(tài)和終態(tài);2 輸出每個(gè)字符的哈夫曼編碼;3 輸入由上述若干字符組成的字符串,對(duì)電文進(jìn)行編碼并輸出;三、 程序源代碼:#include #include #include #define N
2、8#define M 4typedef structchar data;char *code;unsigned int weight;unsigned int parent,lchild,rchild;HTNode,*HuffmanTree; /動(dòng)態(tài)分配數(shù)組存儲(chǔ)赫夫曼樹(shù)typedef char *HuffmanCode; /動(dòng)態(tài)分配數(shù)組存儲(chǔ)赫夫曼編碼表void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,char *data,int *w,int n,char *str/存放n個(gè)字符的權(quán)值(均>0,構(gòu)造赫夫曼樹(shù)HT,并求出n
3、各字符的赫夫曼編碼HCif(n<=1 return;int m=2*n-1; /總節(jié)點(diǎn)數(shù)HT=(HuffmanTreemalloc(m+1*sizeof(HTNode;/0號(hào)單元未用HuffmanTree p;int i,j;printf("n"printf("-n"printf("存放哈夫曼樹(shù)的數(shù)組HT的初態(tài):n"printf("葉子節(jié)點(diǎn)以及它的雙親節(jié)點(diǎn),權(quán)值,左孩子,右孩子分別為:n"for(p=HT+1,i=1;i<=n;+i,+p,+data,+wp->data=*data;p->p
4、arent=p->lchild=p->rchild=0;p->weight=*w;p->code=(char *malloc(n*sizeof(char; printf("%c %2d %2d %2d %2dn",p->data,p->parent,p->weight,p->lchild,p->rchild;for(;i<=m;+p,+ip->parent=p->lchild=p->rchild=p->weight=0;p->data=NULL;p->code=(char *ma
5、lloc(n*sizeof(char; printf(" %2d %2d %2d %2dn",p->parent,p->weight,p->lchild,p->rchild;for(i=n+1;i<=m;+i/建赫夫曼樹(shù)/在HT1-i-1選擇parent為0且weight最小的兩個(gè)節(jié)點(diǎn),其序號(hào)分別為s1和s2unsigned int m1=32767;unsigned int m2=32767;/m1,m2為最小和次小權(quán)值int s1=0;int s2=0;/s1,s2為最小和次小節(jié)點(diǎn)的序號(hào)for(int k=1;k<=i-1;k+if(
6、HTk.parent=0&&(HTk.weight m2=m1;s2=s1;m1=HTk.weight;s1=k;else if(HTk.parent=0&&(HTk.weight m2=HTk.weight;s2=k;HTs1.parent=i;HTs2.parent=i;HTi.lchild=s1;HTi.rchild=s2;HTi.weight=HTs1.weight+HTs2.weight;printf("n"printf("-n"printf("存放哈夫曼樹(shù)的數(shù)組HT的終態(tài):n"printf(
7、"葉子節(jié)點(diǎn)以及它的雙親節(jié)點(diǎn),權(quán)值,左孩子,右孩子分別為:n"for(p=HT+1,i=1;i<=n;+p,+iprintf("%c %2d %2d %2d %2dn",p->data,p->parent,p->weight,p->lchild,p->rchild;for(;i<=m;+p,+iprintf(" %2d %2d %2d %2dn",p->parent,p->weight,p->lchild,p->rchild;/-從葉子到根逆向求每個(gè)字符的赫夫曼編碼-HC
8、=(HuffmanCodemalloc(n+1*sizeof(char *;/分配n個(gè)字符編碼的頭指針向量char *cd;cd=(char *malloc(n*sizeof(char; /分配求編碼的工作空間cdn-1='0' /編碼結(jié)束符int start;unsigned int f,c;printf("n"printf("-n"printf("每個(gè)字符的哈夫曼編碼:n"for(p=HT+1,i=1;i<=n;+i,+p /逐個(gè)字符求赫夫曼編碼start=n-1;/編碼結(jié)束符位置for(c=i,f=HTi.
9、parent;f!=0;c=f,f=HTf.parent/從葉子到根逆向求編碼if(HTf.lchild=c cd-start='0'else cd-start='1'HCi=(char *malloc(n-start*sizeof(char; /為第i個(gè)字符編碼分配空間char *R=&cdstart;strcpy(HCi,&cdstart;strcpy(p->code,R;printf("%c ",p->data;printf("%s",HCi;printf("n"pri
10、ntf("輸出字符串的赫夫曼編碼:n"for(i=0;i for(p=HT+1,j=0;j if(stri=p->dataprintf("%s",p->code;free(cd;/釋放工作空間int main(char dataN,strM;int pN,i;for(i=0;i printf("輸入第%d個(gè)字符及頻率:n",i+1;scanf("%c",&datai;scanf("%d",πgetchar(;printf("輸入字符串:n"for(i=0;i scanf("%c",&stri;HuffmanTree HT;HuffmanCode HC;HuffmanCoding(HT,HC,data,p,N,str;printf("n"return 0;四、 測(cè)試結(jié)果:五、小結(jié)(包括收獲、心得體會(huì)、存在的問(wèn)題及解決問(wèn)題的方法、建議等)注:內(nèi)容一律使用宋體五號(hào)字,單倍行間距本次實(shí)驗(yàn)中第三個(gè)問(wèn)題沒(méi)做出來(lái),我本來(lái)想出了一種方法,但是總是出錯(cuò),我的方法是在結(jié)構(gòu)體中加一個(gè)編碼域,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 環(huán)評(píng)新人培訓(xùn) 課件
- 心內(nèi)科用藥指導(dǎo)
- 中級(jí)財(cái)務(wù)培訓(xùn)考試課件
- 畢業(yè)論文膠裝成冊(cè)怎么弄
- 在實(shí)際中 翻譯
- 生物工程 畢業(yè)論文
- 初中地理新課標(biāo)培訓(xùn)課件
- 椎間孔鏡髓核摘除術(shù)
- excel辦公軟件培訓(xùn)課件
- 發(fā)票新規(guī)培訓(xùn)
- 網(wǎng)絡(luò)與信息安全管理員(高級(jí)技師)資格理論考試題庫(kù)大全(附答案)
- 養(yǎng)老院臨終護(hù)理
- 國(guó)開(kāi)《鑄牢中華民族共同體意識(shí)》形考任務(wù)1-3
- 內(nèi)分泌科血糖監(jiān)測(cè)制度
- 工廠車間流水線承包合同協(xié)議書(shū)范文
- 人教版小學(xué)六年級(jí)全冊(cè)體育教案
- 植被圖與地形因子碳匯關(guān)系
- 青海省西寧市(2024年-2025年小學(xué)三年級(jí)語(yǔ)文)人教版期末考試(下學(xué)期)試卷(含答案)
- 河北省秦皇島市(2024年-2025年小學(xué)三年級(jí)語(yǔ)文)人教版能力評(píng)測(cè)(下學(xué)期)試卷(含答案)
- 數(shù)字化轉(zhuǎn)型與非織造布制造
- 計(jì)算機(jī)系統(tǒng)設(shè)計(jì)及計(jì)算機(jī)網(wǎng)絡(luò)專業(yè)畢業(yè)論文
評(píng)論
0/150
提交評(píng)論