版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
軟件學(xué)院設(shè)計(jì)性實(shí)驗(yàn)報(bào)告
專業(yè):網(wǎng)絡(luò)工程年級(jí)/班級(jí):2023—2023學(xué)年第一學(xué)期
課程名稱數(shù)據(jù)結(jié)構(gòu)指導(dǎo)教師
本組成員
學(xué)號(hào)姓名
實(shí)驗(yàn)地點(diǎn)實(shí)驗(yàn)時(shí)間
項(xiàng)目名稱哈夫曼編/譯碼系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)實(shí)驗(yàn)類型設(shè)計(jì)性
、實(shí)驗(yàn)?zāi)康?/p>
理解哈夫曼樹的特性及其應(yīng)用;在對(duì)哈夫曼樹進(jìn)行理解的基礎(chǔ)上,構(gòu)造哈夫曼樹,并用
構(gòu)造的哈夫曼樹進(jìn)行編碼和譯碼;通過該實(shí)驗(yàn),使學(xué)生對(duì)數(shù)據(jù)結(jié)構(gòu)的應(yīng)用有更深層次的理解。
二、實(shí)驗(yàn)儀器或設(shè)備
學(xué)院提供公共機(jī)房,1臺(tái)/學(xué)生微型計(jì)算機(jī)。
三、總體設(shè)計(jì)(設(shè)計(jì)原理、設(shè)計(jì)方案及流程等)
1.問題描述:
運(yùn)用哈夫曼編碼進(jìn)行通信可以大大提高信道運(yùn)用率,縮短信息傳輸時(shí)間,減少傳輸成本。
但是,這規(guī)定在發(fā)送端通過一個(gè)編碼系統(tǒng)對(duì)待傳數(shù)據(jù)預(yù)先編碼,在接受端將傳來的數(shù)據(jù)進(jìn)行
譯碼(解碼)。對(duì)于雙工信道(即可以雙向傳輸信息的信道),每端都需要一個(gè)完整的編/譯碼系
統(tǒng)。試為這樣的信息收發(fā)站設(shè)計(jì)一個(gè)哈夫曼編/譯碼系統(tǒng)。
2.一個(gè)完整的系統(tǒng)應(yīng)具有以下功能:
1)初始化(Initia1zation).從數(shù)據(jù)文獻(xiàn)DataFile.dat中讀入字符及每個(gè)字符的
權(quán)值,建立哈夫曼樹HuffTree;
2)編碼(EnCoding)。用已建好的哈夫曼樹,對(duì)文獻(xiàn)ToBeTran.dat中的文本進(jìn)行編
碼形成報(bào)文,將報(bào)文寫在文獻(xiàn)Code,txt中;
3)譯碼(Decoding)。運(yùn)用已建好的哈夫曼樹,對(duì)文獻(xiàn)CodeFi1e.dat中的代碼進(jìn)行
解碼形成原文,結(jié)果存入文獻(xiàn)Textfile.txt中;
4)輸出(Output):輸出DataFile.dat中出現(xiàn)的字符以及各字符出現(xiàn)的頻度(或概率);
輸出ToBeTran.dat及其報(bào)文Code.txt;輸出CodeFile.dat及其原文Textfi1e.txt;
規(guī)定:所設(shè)計(jì)的系統(tǒng)應(yīng)能在程序執(zhí)行的過程中,根據(jù)實(shí)際情況(不同的輸入)建立DataFile.da
t、ToBeTran.dat和CodeFi1e.dat三個(gè)文獻(xiàn),以保證系統(tǒng)的通用性。
四、實(shí)驗(yàn)環(huán)節(jié)(涉及重要環(huán)節(jié)、代碼分析等)
1)編寫C語言程序
#inc1ude<string.h>
#inc1ude<malloc.h>
#include<stdio.h>
Sinc1ude<iostream.h>
#include<math.h>
#defineTRUE1
#defineFALSE0
#defineOK1
#defineERROR0
#defineINFEASIBLE-1
typedefstruct
(
?chardata;
intweight;
ointparent,1child,rchi1d;
}HTNode,"HuffmanTree;
typedefchar*nCode;
voidHuffmanCoding(HuffmanTree&HT,HuffmanCode&H
C,char*d,int*w,intn)〃構(gòu)造哈弗曼函數(shù)HT,構(gòu)造編碼HC
voidselect(HuffmanTreeHT,intn,int&sl,int&
S2);
eintm,c,f,j;
HuffmanTreep;
inti,s1,s2,start;
char*cd;
m=2^n-l;//m為結(jié)點(diǎn)數(shù),n為葉子數(shù)
HT=(HuffmanTree)malloc((m+l)*sizeof(HTNode));
叩=HT;
叩++;
for(i=1;i<=n;i++,p++)//將葉子的
值輸入HT中
(
p->data=d[i];//={*d,*w,0,0,0};
p->weight=w[i];
gp—>parent=0;
op->lchild=0;
gp->rchild=0;
)
for(i=n+1;i<=m;i++,p++)//
={,tf,0,0,0,0)
(
中->data=';
p—>weight=0;
°p—>parent=0;
p->1child=0;
^>p->rchild=O;
6S1=1;
s2=2;
for(i=n+l;i<=m;i++)〃構(gòu)建哈夫曼樹
°{
。se1ect(HT,i-1,s1,s2);
HT[i].Ichiid=sl;
HT[i].rchi1d=s2;
gHT[i].weight=HT[sl].weight+HT[s2].weight;
~>HT[s1].parent=i;
HT[s2].parent=i;
oHC=(HuffmanCode)malloc((n+1)*sizeof(HuffmanTree));
//開辟空間,編碼
??cd=(char*)malloc(n*sizeof(char));
cd[nT]='\0';
for(i=l;iV=n;++i)
。{
?start=n-l;
for(c=i,f=HT[i].parent;f!=0;c=f,f=HT[f].parent)
。(
bif(HT[f].lchild==c)
ocd[---start]=,O';
else
cd[-start]=,1
eHC[i]=(char*)malloc((n-start)*sizeof(char));
strcpy(HC[i],&cd[start]);
。printf(〃%c的編碼是:",HT[i]);
。puts(HC[i]);
free(cd);
}
voidselect(HuffmanTreeHT,intn,int&sl,int&s2)
//求最小兩數(shù)
(
einti,t;
os1=1;
,s2=2;
owhile(HT[s1].parent!=0)
sl++;
owhile((HT[s2].parent!=0)I(sl==s2))
8s2++;
/*for(i=l;i<=n;i++)
b{
if(HTLsi].weight>HT[i].weight&&HT[i].pa
rent==0&&s2!=i)
osl=i;
if(HT[s1].weight>HT[s2].weight)
{
bt=Sl;
sl=s2;
s2=t;
for(i=l;i<=n;i++)
(
if(sl!=i)
2{
。if(HT[s2].weight>HT[i].weight&&HT[i].parent==0)
3s2=i;
i
“*/
for(i=l;i<=n;i++)
o(
if(si!=i&&i!=s2)
6{
if(HT[i].weight<HT[si].weight&&HT
[i].parent==0&&i!=s2)
oif(HT[sl].weight<HT[s2].weight)s2=s1;
sl=i;
ge1se
gif(HT[i].weight<HT[s2].weight&&HT[i].parent==O&&sl!
=i)匕s2=i;
。}
)
voidtrans1ation(HuffmanTreeHT,intnum)
(
charstrE20];
。inti,t=num;
叩rintf(〃請(qǐng)輸入由。或1組成的編碼:〃);
ocin>>str;
〃t=HT;//t為樹的指向各節(jié)點(diǎn)的指針
6for(i=0;i<(str1en(str));i++)
b{
if(str[i]=='0')
at=HT[t].Ichild;
比1se
<>if(str[i]==,17)
gt=HT[t].rchild;
oelse
81
8printf(〃編碼輸入錯(cuò)誤");
。break;
0
if(!(HTLt].lchild&&HT[t].rchild))
(
gprintfHT[t].data);
8t=num;
a)
)
printf(〃\n〃);
)
voidmain()
(
?voidHuffmanCoding(HuffmanTree&HT,HuffmanCode
&HC,chard[],intw[],intn);
?voidtranslation(HuffmanTreeHT,intnum);
HuffmanTreeHT=NULL;
HuffmanCodeHC=NULL;
?>chardata,n,*p,*d;
int*w,wei,i,num;
printf("pleaseintputcharacternumber:");
oscanf("%d〃,&n);
od=(char*)ma1loc((n+l)*sizeof(char));
ow=(int^)ma1loc((n+l)*sizeof(int));
printf("請(qǐng)輸入Huffman樹中的字符:\n");
for(i=1;i<=n;i++)
*{
。cin>>data;
d[i]=data;
)
fiprintf("請(qǐng)輸入為d次位權(quán)\n:",n);
for(i=1;i<=n;i++)
6(
~cin?wei;
w[i]=wei;
?)
num=2*n—1;
HuffmanCoding(HT,HC,d,w,n):
translation(HT,num);
)
2)程序分析
此實(shí)驗(yàn)是構(gòu)造哈夫曼樹,求出哈夫曼編碼然后輸出
構(gòu)造哈夫曼樹的算法操作時(shí)選出兩棵根節(jié)點(diǎn)的權(quán)值最小的一顆樹的左右
子樹,且置新樹的根節(jié)點(diǎn)的權(quán)值為其左右子樹上根節(jié)點(diǎn)的權(quán)值之和,根據(jù)哈
夫曼樹求出帶權(quán)途徑的算法操作是用遞歸調(diào)用的方法。
在此實(shí)驗(yàn)的操作過程中要注意構(gòu)造哈夫曼樹的方法,由于在此操作的過程中
用的的指針變量特別多,容易混淆。
3)運(yùn)營結(jié)果舉例
,"C:\Users\fzl\Documents\TencentFiles\1125653O39\FileRecv\Debug\llq^§^.exe*[回
pleaseintputcharacternunber:?
請(qǐng)輸入fman樹巾的字符:
1
3
-
-
2
3
4
5
6
z曰110
12,.vf
-1
J0
i-
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版市政工程挖掘機(jī)租賃及施工配合合同協(xié)議書3篇
- 2025版智能交通管理系統(tǒng)軟件開發(fā)與運(yùn)營服務(wù)合同3篇
- 2025版城市綠地養(yǎng)護(hù)勞務(wù)分包合同模板4篇
- 企業(yè)人力資源管理概念
- 二零二五版知識(shí)產(chǎn)權(quán)保密與競(jìng)業(yè)限制服務(wù)合同3篇
- 塑料薄膜光學(xué)性能研究考核試卷
- 2025版事業(yè)單位教師崗位聘用合同續(xù)簽協(xié)議書3篇
- 2025年度碼頭轉(zhuǎn)租及船舶??糠?wù)外包合同4篇
- 04毛首鞭形線蟲簡(jiǎn)稱鞭蟲47課件講解
- 2025年食品行業(yè)食品安全風(fēng)險(xiǎn)評(píng)估合同范本3篇
- 垃圾處理廠工程施工組織設(shè)計(jì)
- 天皰瘡患者護(hù)理
- 2025年蛇年新年金蛇賀歲金蛇狂舞春添彩玉樹臨風(fēng)福滿門模板
- 《建筑制圖及陰影透視(第2版)》課件 4-直線的投影
- 新生物醫(yī)藥產(chǎn)業(yè)中的人工智能藥物設(shè)計(jì)研究與應(yīng)用
- 防打架毆斗安全教育課件
- 損失補(bǔ)償申請(qǐng)書范文
- 壓力與浮力的原理解析
- 鐵路損傷圖譜PDF
- 裝修家庭風(fēng)水學(xué)入門基礎(chǔ)
- 移動(dòng)商務(wù)內(nèi)容運(yùn)營(吳洪貴)任務(wù)二 社群的種類與維護(hù)
評(píng)論
0/150
提交評(píng)論