哈夫曼編碼 資料結構 源程式

2021-04-09 01:01:51 字數 2429 閱讀 2132

構造思想:哈夫曼樹 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年提出,這種樹在資訊檢索中很有用。結點之間的路徑長度 從乙個結點到另乙個結點之間的分支數目。樹的路徑長度 從樹的根到樹中每乙個結點的路徑長度之和。結點的帶權路徑長度 從該結點到樹根之間的路徑...