構造思想:哈夫曼樹 1:由給定的n個權值構造n棵樹只有乙個葉子結點的二叉樹,得到乙個二叉樹的合f; 2:再f中選取根結點的權值最小和次小的二棵二叉樹作為左,右子樹構造一棵新的二叉樹,這棵樹的根結點的權值為左右子樹根結點權值之和。 3:在集合f中刪除作為左右子樹的二棵二叉樹,並將新建的二叉樹加入到集合f中。 4:重複2 ,3兩步,當f中只剩下一棵二叉樹時,便建立好一棵哈夫曼樹
/*編寫者:小黎 */
/*目的:給資料結構初學者一點點幫助 */
#include
#include
#include
#define n 100
int h[50],m[50];
int i=0,j=0,v=1,t=1;
/*用來標記huffman樹的深度*/
int k=195,k=192,chp=179,chr=27;/*輸出huffman時用到的字元*/
int huffrecod=0; /*用於記錄huffman的編碼與字元的個數*/
typedef struct lnodelnode,*listnode;
typedef struct charhuffmancharhuffman,*huffmanchar;
typedef struct treenodetreenode,*ntree;
typedef struct queuenode/*佇列的構造體*/
queuenode,*listqueue;
huffmanchar huff;
listqueue returnroot(listnode heap)
return k;}
listnode creatleaflist(char s) /*輸入字串行,確定葉子結點及權值*/
/*if(s[i]==s[j])*/
else
/*if(i==(j-1))*/
}}/*for(i=0;i
listqueue heaplistqueue(listqueue heapqueue) /*確定哈曼樹*/
else
}rs=pk;
heapqueue=rs->next;
while(heapqueue!=null)
else
else
}}/*while(heapqueue!=null)*/
heapqueue=rs;
ps=(ntree)malloc(sizeof(treenode));
ps->code='';ps->lchild=pa;ps->rchild=pb;ps->values=a+b;
rss=(listqueue)malloc(sizeof(queuenode));
rss->values=a+b;
rss->pntree=ps;
heapqueue->next=rss;
rss->next=null;
pks=pk;
}return pk;}
void printdata(ntree heaptree) /*輸出哈夫曼編碼及輸出哈夫曼樹*/}
void encode(char s,huffmanchar huff)
{ int nt=0;
int hfcount;
int ihuff;
while(s[nt]!=null)
{ for(ihuff=0;ihuff<50;ihuff++)
{ if(s[nt]==huff[ihuff].code)
{for(hfcount=0;hfcountvoid main()
{int i=0,j=0;
char s[n],c;
listnode heap; /*確定葉子結點*/
ntree heaptree; /*確定哈夫曼樹*/
this huffman program
please input char list and in enter of end!:
sdklfjkslr
the huffman:
10├ 4
│ ├ 2 ←l--(00)
│ └ 2
│ │ ├ 1 ←d--(010)
│ │ └ 1 ←f--(011)
└ 6│ ├ 2
│ │ ├ 1 ←j--(100)
│ │ └ 1 ←r--(101)
│ └ 4
│ │ ├ 2 ←s--(110)
│ │ └ 2 ←k--(111)
the char coding:
l-00 d-010 f-011 j-100 r-101 s-110 k-111
the chars encode:
start--<1100101110001110011111000101>--end
哈夫曼編碼 資料結構
上週日做了資料結構實驗報告,感覺還行。一 課題描述 二 概要設計 主要思想應根據 執行順序了解 1 資料邏輯結構 主要是樹形結構,也有使用線性結構作為輔助 儲存結構分析 主要是非線性結構 二叉樹 結點 struct hufftree 2 本程式包含8個函式 1 將資料樹化函式hufftree cre...
哈夫曼編碼源程式
哈夫曼編碼 一 源程式 include include include include huffman 樹的儲存結構 define n 8 葉子數目根據需要設定 define m 2 n 1 huffman 樹中結點總數 typedef struct htnode typedef htnode hu...
資料結構 哈夫曼樹 哈夫曼編碼
哈夫曼樹又稱最優樹 二叉樹 是一類帶權路徑最短的樹。構造這種樹的演算法最早是由哈夫曼 huffman 1952年提出,這種樹在資訊檢索中很有用。結點之間的路徑長度 從乙個結點到另乙個結點之間的分支數目。樹的路徑長度 從樹的根到樹中每乙個結點的路徑長度之和。結點的帶權路徑長度 從該結點到樹根之間的路徑...