哈夫曼編碼上機(jī)實(shí)驗(yàn)報(bào)告_計(jì)算機(jī)軟件及應(yīng)用_IT計(jì)算機(jī)_第1頁(yè)
哈夫曼編碼上機(jī)實(shí)驗(yàn)報(bào)告_計(jì)算機(jī)軟件及應(yīng)用_IT計(jì)算機(jī)_第2頁(yè)
哈夫曼編碼上機(jī)實(shí)驗(yàn)報(bào)告_計(jì)算機(jī)軟件及應(yīng)用_IT計(jì)算機(jī)_第3頁(yè)
哈夫曼編碼上機(jī)實(shí)驗(yàn)報(bào)告_計(jì)算機(jī)軟件及應(yīng)用_IT計(jì)算機(jī)_第4頁(yè)
哈夫曼編碼上機(jī)實(shí)驗(yàn)報(bào)告_計(jì)算機(jī)軟件及應(yīng)用_IT計(jì)算機(jī)_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第四次上機(jī)實(shí)驗(yàn)報(bào)告姓名:康輝班級(jí):1518021一、 題目要求對(duì)輸入的一串電文字符(A B C D E F G H 8 個(gè)字符,其概率分別為 0.05, 0.29, 0.07, 0.08, 0.14, 0.23, 0.03, 0.11)實(shí)現(xiàn)Huffman編碼,再對(duì)Huffman編碼生成的代碼串進(jìn)行譯碼,輸出電文字符串。實(shí)現(xiàn)功能如下: Huffman樹(shù)的建立 Huffman編碼的生成 編碼文件的譯碼二、 程序思路設(shè)置一個(gè)數(shù)組v存放待編碼元素,一個(gè)數(shù)組w存放權(quán)值,n為元素個(gè)數(shù),ht為創(chuàng)立的哈夫曼樹(shù),hc為指針數(shù)組存儲(chǔ)哈夫曼編碼,這些作為函數(shù)參數(shù)傳遞到函數(shù)haffcoding中,創(chuàng)立編碼樹(shù),然后按權(quán)

2、值進(jìn)行編碼,這些都在一個(gè)函數(shù)中實(shí)現(xiàn)。哈夫曼樹(shù)節(jié)點(diǎn):typedef structchar data;Int weight;Int parent,lchild,rchild;htnode,huffmantree;三、 程序設(shè)計(jì)中遇到的問(wèn)題1、 選擇一個(gè)數(shù)組來(lái)存儲(chǔ)來(lái)存放編碼,但是指針數(shù)組運(yùn)用的不夠熟練,造成值傳遞時(shí)出錯(cuò)。最后查看c語(yǔ)言書(shū)籍得以解決.2、 在選擇所有權(quán)值中最小,次小的時(shí)候出現(xiàn)錯(cuò)誤,造成亂序,編出來(lái)的編碼不正確,最后通過(guò)單步調(diào)試找出錯(cuò)誤。3、 hc=(huffmancode)malloc(n+1)*sizeof(char *);這里第一次分配空間為char型,對(duì)指針數(shù)組很不熟悉造成的。4

3、、 還有其他的很多問(wèn)題在程序中都有注釋加重點(diǎn)。四、 程序源碼#include <stdio.h>#include <stdlib.h>#include<string.h>#define length sizeof(htnode)typedef struct htnodechar data;int weight;int parent,lchild,rchild;htnode,*huffmantree;/哈夫曼存儲(chǔ)結(jié)構(gòu) typedef char *huffmancode;/存儲(chǔ)哈夫曼編碼表void huffmancoding(huffmantree ht,huf

4、fmancode &hc,int *w,char *v,int n)/v是待編碼元素?cái)?shù)組,w是每個(gè)元素的權(quán)值,構(gòu)造哈夫曼樹(shù)ht,hc存放哈夫曼編碼 int i,m,s1,s2,min1,min2,j;char *cd;int start,c,f;if(n<=1) return;m=2*n-1;ht=(huffmantree)malloc(m+1)*length);/有n個(gè)葉子節(jié)點(diǎn)的hfuumantree需要2n-1個(gè)結(jié)點(diǎn)存儲(chǔ) for(i=1;i<=n;+i,+w,+v)/對(duì)n個(gè)元素進(jìn)賦值,權(quán)值,父親左右孩子標(biāo)記為0 hti.data=*v;hti.weight=*w;hti

5、.lchild=0;hti.parent=0;hti.rchild=0; for(;i<=m;+i)/對(duì)后m-n個(gè)非葉子節(jié)點(diǎn)標(biāo)記 hti.data=0;hti.weight=0;hti.lchild=0;hti.parent=0;hti.rchild=0 ;for(i=n+1;i<=m;+i)/建樹(shù) s1=s2=0;min1=min2=32767; for(j=1;j<=i-1;+j) if(htj.parent=0)if(htj.weight<min1)min2=min1;min1=htj.weight;s2=s1;s1=j;/此第一次處排序出錯(cuò) else if(ht

6、j.weight<min2)min2=htj.weight;s2=j; hts1.parent=i;hts2.parent=i; hti.lchild=s1;hti.rchild=s2; hti.weight=min1+min2; /一下為從葉子結(jié)點(diǎn)到根節(jié)點(diǎn)求哈夫曼編碼 hc=(huffmancode)malloc(n+1)*sizeof(char *);/分配n個(gè)字符編碼的頭指針向量 cd=(char*)malloc(n*sizeof(char); /分配求編碼的工作空間 cdn-1='0'for(i=1;i<=n;+i)start=n-1;for(c=i,f=h

7、ti.parent;f!=0;c=f,f=htf.parent)/葉子到根if(htf.lchild=c) /=cd-start='0'elsecd-start='1' hci=(char *)malloc(n-start)*sizeof(char);/為第i個(gè)字符編碼分配空間strcpy(hci,cd+start); free(cd); /huffmancodingint main()printf("*哈夫曼編碼* by-KangHuin");int n,i;char *v;/存字符 int *w;/權(quán)值 huffmantree ht;hu

8、ffmancode hc;printf("請(qǐng)輸入需要編碼元素的個(gè)數(shù):");scanf("%d",&n);printf("請(qǐng)輸入要編碼的字符串(連續(xù)輸入不要有空格:)") ;v=(char *)malloc(n+2)*sizeof(char) ;vn+1='0'scanf("%s",v);w=(int *)malloc(n+1)*sizeof(int);printf("請(qǐng)輸入每個(gè)字符的權(quán)值(空格隔開(kāi)):");for(i=0;i<n;+i)/i=1錯(cuò)誤,可能會(huì)造成傳輸過(guò)去形參空?qǐng)?zhí)政scanf("%d",w+i); huffmancoding(ht,hc,w,v,n);printf("各個(gè)字符哈夫曼編碼分別為:");for(i=1;i<=n;i+)printf("%s ",hci); /這里竟然他媽一直用的ht,讓我找了那么久= =printf("n");return 0;運(yùn)行截圖:五、 編程總結(jié)最大的感受就是單步調(diào)試在程序修改中的重要性,以前寫(xiě)的程序都比擬少,有錯(cuò)誤直接就可以看出來(lái),現(xiàn)在程序比擬長(zhǎng),不易

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論