日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第十周项目实践 哈夫曼树的建立哈夫曼编码

發布時間:2025/4/16 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第十周项目实践 哈夫曼树的建立哈夫曼编码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
typedef struct {char date;int lchild,rchild;int parent; }HTnode; void CreateHTnode(HTnode ht[],int n) {int min1,min2,lnode,rnode;for(int i=0;i<2*n-1;++i)//所有節點的相關值置為-1{ht[i].prent=ht[i].lchild=ht[i].rchild-1;}for(int i=n;i<2*n-1;++i)//構造哈夫曼樹{min1=min2=inf;lnode=rnode=-1;//代表2個最小權重的節點位置for(int j=0;j<i;++j)//在【0,i)中尋找最小權重的節點{if(ht[j].praent=-1)//在先前尚未找過的節點中進行查找{if(ht[j].date<min1)//判斷是否是左節點{min2=min1,rnode=lnode;min1=ht[j].date,lnode=j;}else if(ht[j].date<min2)//判斷是否是右節點。基于思想,不能寫成else 也不能寫成if{min2=ht[j].date,rnode=j;}}}//雙親節點的處理:ht[i].date=ht[lnode].date+ht[rnode].date;ht[i].lchild=lnode,ht[i].rchild=rnode;ht[lnode].parent=ht[rnode].parent=i;} }數據結構李春葆第五版P239哈夫曼編碼:typedef struct {char cd[N];//存放當前節點的哈夫曼嗎int start;//表示cd[start...n0]部分是哈夫曼碼//因為哈夫曼樹中每個葉子節點的哈夫曼編碼長度不同,為此采用HCode類型的變量的cd[start..n0]存放當前結點的哈夫曼碼 }HCode; void createHCode(HTNode ht[],Hcode hcd[],int n0) {Hcode hc;int c,f;for(int i=0;i<n0;++i)//根據哈夫曼樹求哈夫曼碼{hc.start=n0,c=i;f=ht[i].parent;while(f!=-1)//直到循環到無雙親節點,即到達根節點{if(ht[f].lchild==c)//當前節點是雙親節點的左孩子hc.cd[hc.start--]='0';elsehc.cd[hc.start--]='1';//右孩子c=f,f=ht[f].parent;//反復進行同樣的操作}hc.start++;//start指向哈夫曼樹編碼的最開始的字符hcd[i]=hc;} }

總結

以上是生活随笔為你收集整理的第十周项目实践 哈夫曼树的建立哈夫曼编码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。