二叉樹的存儲與應(yīng)用_第1頁
二叉樹的存儲與應(yīng)用_第2頁
二叉樹的存儲與應(yīng)用_第3頁
二叉樹的存儲與應(yīng)用_第4頁
二叉樹的存儲與應(yīng)用_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、/link?url二VpxeyANa5bnKVPJAxF79YbXPSnnyZEwbHpQi zCA-3Id_aZGi7szmlnQ9FVlSt26VUsNBpLFCIpDfvSADJZHGP3NTh7E20d6DvlcICCBGQ e哈夫曼編碼/譯碼問題:已知某密碼中共含有5個字符A、B、C、D、E,它們出現(xiàn)的頻率依 次是0.1、0.3、0.4、0.15和0.05。要求采用哈夫曼算法,求出5個字符的最優(yōu)編碼;反之, 當(dāng)用戶給出某個0/1序列,解碼出相應(yīng)的字符序列;如有錯誤輸入的0/1序列,要打印出錯 提示信息。#in elude vstdio.h#i nclude vmalloc.h#in

2、elude vstri ng.hstruct huffmantreechar zifu;int weight;int pare nt,lchild,rchild;struct huffmancodechar cd50;int start;int *select(struct huffma ntree HT,i nt n ,i nt s)int i,mi n1,mi n2;min1 = 32767;min2 = 32767;for (i = 1; i = n; + i)if (HTi.weightvmi n1&H Ti.pare nt=0)mi n1 = HTi.weight; s0 = i;f

3、or (i = 1; i =min1&i != s0)mi n2 = HTi.weight;s1 = i;return s;void createhuffma ntree(struct huffma ntree HT,struct huffma ncode HC,char zi, int w,i nt n)FILE *fp;int m,i,s2,c,f,end=0,j,k;char lin shi50;if (nv=1) retur n;m=2* n-1;fp = fopen (hfmtree.txt,w+);for (i=1;iv=n;+i)HTi.zifu=zii;HTi.weight=w

4、i;HTi.pare nt=0;HTi.lchild=0;HTi.rchild=0;for (;iv=m;+i)HTi.weight=0;HTi.lchild=0;HTi.rchild=0;HTi.pare nt=0;for (i=n+1;iv=m;+i)select(HT,i-1,s);HTsO.pare nt = i;HTs1.pare nt = i;HTi.lchild = s0;HTi.rchild = s1;HTi.weight = HTsO.weight + HTs1.weight;for (i = 1;i = m; + i)fpri ntf(fp,%d %d%d%dn,i,HTi

5、.pare nt,HTi.lchild,HTi.rchild);for (i = 1;i = 0;j -,k +)HCi.cdk = lin shij;HCi.cdk = 0;end = 0;void pri nt(struct huffma ntree HT,struct huffma ncode HC,i nt n)int i,j;prin tf(輸出哈夫曼編碼:n);for (i = 1;i = n; i +)pri ntf(%c:,HTi.zifu);for (j = 0;j HCi.start;j +)pri ntf(%c,HCi.cdj);pri ntf(n);void pri n

6、thuffma ntree(struct huffma ntree HT,i nt n)int m,i;m = 2 * n - 1;pri ntf(char-pare nt-lchild-rchildn);for (i = 1;i = m; + i)prin tf(%d%d%d%dn,i,HTi.pare nt,HTi.lchild,HTi.rchild);int ma in()FILE *fp;int n,i,w100,xuanze,j,k=0,x,y=0,p=0,q;char zi100,a1000,huffma n1000,yiwe n1000;struct huffmancode HC

7、100;struct huffma ntree HT100;pri ntf*n 1.建立哈夫曼樹n 2.哈夫曼編碼n 3.哈夫曼譯碼n 4.打印哈夫曼樹 n 0退出n*門);prin tf(輸入你想要的操作 n);sca nf (%d, &xua nze);while (xua nze)switch (xua nze)case 1:pri ntf(輸入需要字符的個數(shù) n);sca nf(%d,&n);prin tf(輸入需要字符的字符和權(quán)數(shù)n ”);for (i = 1;i = n;+ i)getchar()();scanf (%c %d,&zii,&wi); createhuffma ntr

8、ee(HT,HC,zi,w, n); break;case 2:fp = fope n( ToBeTra n.txt,w+);pri ntf(輸入你想編碼的電文 n);getchar()();gets(a);fpri ntf(fp,%s,a);for (i = 0;ai != 0; +i)for (j = 1;j = n; +j)if (ai = HTj.zifu)for (x = 0;HCj.cdx != 0; +k,+ x)huffma nk=HCj.cdx;huffma nk = 0;prin tf(打印哈夫曼編碼n);for (i = 0;i 50; +i)for (j = 0;j =

9、 k)break;prin tf(n);if (p = k)break;fp = fope n( CodeFile.txt,w+);fpri ntf(fp,%s,huffma n);break;case 3:for (i = 0;huffmani != 0;)for (j = 1;j = n; +j)q = 0;for (p = 0;p HCj.start; +p)if (huffma ni = HCj.cdp)q +;i +;1)HTj.zifu;if(p = (HCj.start 1)HTj.zifu;yiwe ny=y +; break;elsei = i - q break;yiwe ny = 0; puts(yiwe n);prin tf(n);break;case 4:pri nthuffma ntree(HT, n);pri

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論