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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构源码笔记(C语言):哈夫曼树

發(fā)布時間:2025/4/16 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构源码笔记(C语言):哈夫曼树 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
#include <stdio.h> #include <stdlib.h> #define MAXINT 2147483647 #define MAXNUM 50 #define MAXNODE 100struct HtNode //哈夫曼樹結(jié)點的結(jié)構(gòu) {int ww;int parent,llink,rlink; };struct HtTree {struct HtNode ht[MAXNODE];int root;//哈夫曼樹根在數(shù)組中的下標(biāo) };typedef struct HtTree *PHtTree;//哈夫曼樹類型的指針類型PHtTree huffman(int m,int *w) //構(gòu)造m個葉結(jié)點的haffman樹 {PHtTree pht;int i,j,x1,x2,m1,m2;pht=(PHtTree)malloc(sizeof(struct HtTree)); //創(chuàng)建空haffman樹if(pht==NULL){printf("Out of space!!\n");return pht;}for(i=0;i<2*m-1;i++) //置初態(tài){pht->ht[i].llink=-1;pht->ht[i].rlink=-1;pht->ht[i].parent=-1;if(i<m)pht->ht[i].ww=w[i];elsepht->ht[i].ww=-1;}for(i=0;i<m-1;i++) //每循環(huán)一次構(gòu)造一個內(nèi)部結(jié)點{m1=MAXINT;m2=MAXINT; //相關(guān)變量賦初值x1=-1;x2=-1;for(j=0;j<m+1;j++) //找兩個最小權(quán)值的無父結(jié)點的結(jié)點if(pht->ht[j].ww<m1&&pht->ht[j].parent==-1){m2=m1;x2=x1;m1=pht->ht[j].ww;x1=j;}elseif(pht->ht[j].ww<m2&&pht->ht[j].parent==-1){m2=pht->ht[j].ww;x2=j;}pht->ht[x1].parent=m+i; //構(gòu)造一個內(nèi)部結(jié)點pht->ht[x2].parent=m+i;pht->ht[m+i].ww=m1+m2;pht->ht[m+i].llink=x1;pht->ht[m+i].rlink=x2;pht->root=m+i;}return pht; }void printcode(PHtTree pht,int m) //打印huffman樹pht中每個外部結(jié)點的編碼 {int i,j;int parentnode;for(j=0;j<m;j++){if(pht->ht[j].llink!=-1||pht->ht[j].rlink!=-1) continue;//不是分支結(jié)點printf("the Reverse conde of node%d is :",j+1); //得到的編碼應(yīng)倒過來i=j;while(pht->ht[i].parent!=-1){parentnode=pht->ht[i].parent;if(pht->ht[parentnode].llink==i)printf("0");elseprintf("1");i=parentnode;}printf("\n");} }int main() {int m=6;int w[]={1,3,5,7,9,11};PHtTree pht;pht=huffman(6,w);printcode(pht,m); return 0; }

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言描述)匯總:

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):英文單詞按字典序排序的基數(shù)排序

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):直接插入排序

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):直接選擇排序

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):置換-選擇算法

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):Huffman樹字符編碼

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):Josephus問題之順序表

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):Josephus問題之循環(huán)鏈接表

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):多項式合并

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):二叉樹之葉子結(jié)點旋轉(zhuǎn)銷毀

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):哈夫曼樹

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):集合的位向量表示

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):鏈接隊列

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):鏈接棧

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):線性表的單鏈表示

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):線性表的順序表示

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):棧的基本操作

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):中綴表達式

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):希爾插入排序

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):索引文件建立和查找

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):冒泡排序

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):快速排序

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):可變長度字符串的快速排序

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):基數(shù)排序

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):二路歸并排序

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):堆排序

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):二叉樹搜索樹Kruskal

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):二叉搜索樹Prim

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):最短路徑弗洛伊德算法

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):深度、廣度優(yōu)先生成樹

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):鄰接矩陣轉(zhuǎn)化鄰接表

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):統(tǒng)計字符串中出現(xiàn)的字符及其次數(shù)

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):順序查找

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):哈希表的相關(guān)運算算法

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):分塊法查找

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):二分查找

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):二叉樹遍歷

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):二叉平衡樹的相關(guān)操作算法

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):二叉排序樹的基本操作算法

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語言):B樹的相關(guān)運算算法

總結(jié)

以上是生活随笔為你收集整理的数据结构源码笔记(C语言):哈夫曼树的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。