




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
軟件學(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(〃請輸入由?;?組成的編碼:〃);
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("請輸入Huffman樹中的字符:\n");
for(i=1;i<=n;i++)
*{
。cin>>data;
d[i]=data;
)
fiprintf("請輸入為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:?
請輸入fman樹巾的字符:
1
3
-
-
2
3
4
5
6
z曰110
12,.vf
-1
J0
i-
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度航空航天設(shè)備拆裝搬運(yùn)與研發(fā)測試合同
- 中國計(jì)算機(jī)行業(yè)市場深度分析及“十四五”規(guī)劃戰(zhàn)略分析報(bào)告
- 2025-2030年中國振動(dòng)膠管項(xiàng)目投資可行性研究分析報(bào)告
- Unit 7 Section B Project3a~3c教學(xué)設(shè)計(jì) -2024-2025學(xué)年人教版英語七年級(jí)上冊
- 中國聲光控自動(dòng)開關(guān)項(xiàng)目投資可行性研究報(bào)告
- 中國紙扇市場供需預(yù)測及投資戰(zhàn)略研究咨詢報(bào)告
- 淮南太陽能熱發(fā)電項(xiàng)目可行性研究報(bào)告
- 2025年度茶樓茶具更新?lián)Q代采購合同
- Unit 1 This is me!integration教學(xué)設(shè)計(jì) 2024-2025學(xué)年譯林版(2024)七年級(jí)英語上冊
- 2025年度智能家居裝修工程糾紛起訴書(智能版)
- 月考后正確的試卷分析方法分析研究
- 越野車改裝方案
- 修辭手法在計(jì)算機(jī)語言學(xué)中的應(yīng)用
- 裝修施工規(guī)定(十四篇)
- 消防工程維保方案三篇
- 高考一輪復(fù)習(xí)《文學(xué)類文本閱讀(小說)》教案
- 空間向量求線面角
- 閱讀與思考圓錐曲線的光學(xué)性質(zhì)及其應(yīng)用課件
- 試產(chǎn)到量產(chǎn)項(xiàng)目轉(zhuǎn)移清單
- 城市軌道交通應(yīng)急處理 01 城市軌道交通應(yīng)急處理概述-2
- 2023年全國中學(xué)生物理競賽預(yù)賽試題含答案版
評(píng)論
0/150
提交評(píng)論