多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > php開(kāi)源 > php教程 > 數(shù)據(jù)結(jié)構(gòu)例程――哈夫曼樹(shù)

數(shù)據(jù)結(jié)構(gòu)例程――哈夫曼樹(shù)

來(lái)源:程序員人生   發(fā)布時(shí)間:2016-04-20 10:12:14 閱讀次數(shù):2421次

本文是數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)系列(6):樹(shù)和2叉樹(shù)中第15課時(shí)哈夫曼樹(shù)的例程。

這里寫(xiě)圖片描述

#include <stdio.h> #include <string.h> #define N 50 //葉子結(jié)點(diǎn)數(shù) #define M 2*N⑴ //樹(shù)中結(jié)點(diǎn)總數(shù) //哈夫曼樹(shù)的節(jié)點(diǎn)結(jié)構(gòu)類(lèi)型 typedef struct { char data; //結(jié)點(diǎn)值 double weight; //權(quán)重 int parent; //雙親結(jié)點(diǎn) int lchild; //左孩子結(jié)點(diǎn) int rchild; //右孩子結(jié)點(diǎn) } HTNode; //每一個(gè)節(jié)點(diǎn)哈夫曼編碼的結(jié)構(gòu)類(lèi)型 typedef struct { char cd[N]; //寄存哈夫曼碼 int start; } HCode; //構(gòu)造哈夫曼樹(shù) void CreateHT(HTNode ht[],int n) { int i,k,lnode,rnode; double min1,min2; for (i=0; i<2*n-1; i++) //所有結(jié)點(diǎn)的相干域置初值⑴ ht[i].parent=ht[i].lchild=ht[i].rchild=-1; for (i=n; i<2*n-1; i++) //構(gòu)造哈夫曼樹(shù) { min1=min2=32767; //lnode和rnode為最小權(quán)重的兩個(gè)結(jié)點(diǎn)位置 lnode=rnode=-1; for (k=0; k<=i-1; k++) if (ht[k].parent==-1) //只在還沒(méi)有構(gòu)造2叉樹(shù)的結(jié)點(diǎn)中查找 { if (ht[k].weight<min1) { min2=min1; rnode=lnode; min1=ht[k].weight; lnode=k; } else if (ht[k].weight<min2) { min2=ht[k].weight; rnode=k; } } ht[i].weight=ht[lnode].weight+ht[rnode].weight; ht[i].lchild=lnode; ht[i].rchild=rnode; ht[lnode].parent=i; ht[rnode].parent=i; } } //實(shí)現(xiàn)哈夫曼編碼 void CreateHCode(HTNode ht[],HCode hcd[],int n) { int i,f,c; HCode hc; for (i=0; i<n; i++) //根據(jù)哈夫曼樹(shù)求哈夫曼編碼 { hc.start=n; c=i; f=ht[i].parent; while (f!=-1) //循序直到樹(shù)根結(jié)點(diǎn) { if (ht[f].lchild==c) //處理左孩子結(jié)點(diǎn) hc.cd[hc.start--]='0'; else //處理右孩子結(jié)點(diǎn) hc.cd[hc.start--]='1'; c=f; f=ht[f].parent; } hc.start++; //start指向哈夫曼編碼最開(kāi)始字符 hcd[i]=hc; } } //輸出哈夫曼編碼 void DispHCode(HTNode ht[],HCode hcd[],int n) { int i,k; double sum=0,m=0; int j; printf(" 輸出哈夫曼編碼: "); //輸出哈夫曼編碼 for (i=0; i<n; i++) { j=0; printf(" %c: ",ht[i].data); for (k=hcd[i].start; k<=n; k++) { printf("%c",hcd[i].cd[k]); j++; } m+=ht[i].weight; sum+=ht[i].weight*j; printf(" "); } printf(" 平均長(zhǎng)度=%g ",1.0*sum/m); } int main() { int n=8,i; //n表示初始字符串的個(gè)數(shù) char str[]= {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'}; double fnum[]= {0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.1}; HTNode ht[M]; HCode hcd[N]; for (i=0; i<n; i++) { ht[i].data=str[i]; ht[i].weight=fnum[i]; } printf(" "); CreateHT(ht,n); CreateHCode(ht,hcd,n); DispHCode(ht,hcd,n); printf(" "); return 0; }

版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。

生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 成zzzwww日本免费 | 欧美高清免费一级在线 | 伊人久久网国产伊人 | 欧美黑人性受xxxx喷水 | japanese在线视频 | 国产精品一区二区三 | 波多野一区 | 伊人色婷婷综在合线亚洲 | 欧美人与性另类 | 五月花婷婷 | 国产毛片视频网站 | 女同舌吻janpan | 国产亚洲视频在线播放大全 | 亚洲一级成人 | 久久精品午夜 | 看一级毛片免费观看视频 | 日韩精品1区| 韩国精品一区二区久久 | a爱做片免费网站 | 国产免费播放一区二区 | 天啦噜tianlalu精品视频 | 欧美三级免费观看 | 91在线亚洲精品一区 | 国产亚洲一区二区在线观看 | 国产精品一区二 | 真实呦女free性 | 性xxxxxx | 毛片天天看 | 国产婷婷一区二区在线观看 | 一本中文字幕一区 | 亚洲国产成人久久综合一区 | 波多野结衣一区二区 | 日韩老女人 | 成人精品一区二区激情 | 日本在线看免费 | 中文字幕在线看片 | 性鸥美| 日本一区二区网站 | 精品欧美一区二区三区 | 欧美一级特黄啪啪片免费看 | 亚洲国产成人久久综合一 |