Huffman樹和編碼

2021-08-11 03:48:47 字數 1822 閱讀 2676

#include #include#include#define maxbit      100

#define maxvalue 10000

#define maxleaf 30

#define maxnode maxleaf*2 -1

typedef struct

hcodetype; /* 編碼結構體 */

typedef struct

hnodetype; /* 結點結構體 */

/* 構造一顆哈夫曼樹 */

void huffmantree (hnodetype huffnode[maxnode], int n)

/* end for */

/* 輸入 n 個葉子結點的權值 */

fflush(stdin);

for (i=0; i

/* end for */

/* 迴圈構造 huffman 樹 */

for (i=0; i

else if (huffnode[j].weight < m2 && huffnode[j].parent==-1)

} /* end for */

/* 設定找到的兩個子結點 x1、x2 的父結點資訊 */

huffnode[x1].parent = n+i;

huffnode[x2].parent = n+i;

huffnode[n+i].weight = huffnode[x1].weight + huffnode[x2].weight;

huffnode[n+i].lchild = x1;

huffnode[n+i].rchild = x2;

//printf ("x1.weight and x2.weight in round %d: %d, %d\n", i+1, huffnode[x1].weight, huffnode[x2].weight); /* 用於測試 */

//printf ("\n");

} /* end for */

} /* end huffmantree */

//解碼

void decodeing(char string,hnodetype buf,int num)

i=0;

nump=&num[0];

while(nump

else tmp=buf[tmp].rchild;

nump++;

} printf("%c",buf[tmp].value); }}

int main(void)

/* end while */

/* 儲存求出的每個葉結點的哈夫曼編碼和編碼的起始位 */

for (j=cd.start+1; j

huffcode[i].start = cd.start;

huffcode[i].value=huffnode[i].value;

} /* end for */

/* 輸出已儲存好的所有存在編碼的哈夫曼編碼 */

huffman樹和huffman編碼

huffman樹和huffman編碼 include include include include define overflow 1 typedef struct htnode,huffmantree typedef char huffmancode void select huffmantre...

Huffman樹與Huffman編碼

一.哈夫曼樹概念 路徑 祖先到節點之間的分支構成一條通往節點的路徑 路徑長度 路徑上分支的數目稱為路徑長度 節點的權 給樹中節點所設的物理意義的值 節點帶權路徑長度 從根到該點路徑長度與該點權值的乘機 huffman樹就是所有樹中每點帶權路徑加和最短的樹。二.huffman樹構造步驟 1.根據每個點...

Huffman樹與Huffman編碼

huffman tree簡介 赫夫曼樹 huffman tree 又稱最優二叉樹,是一類帶權路徑長度最短的樹。假設有n個權值,如果構造一棵有n個葉子節點的二叉樹,而這n個葉子節點的權值是,則所構造出的帶權路徑長度最小的二叉樹就被稱為赫夫曼樹。這裡補充下樹的帶權路徑長度的概念。樹的帶權路徑長度指樹中所...