哈夫曼編碼實現

2021-08-04 16:08:07 字數 1319 閱讀 9939

#define huffmancode char*

typedef struct node* huffmantree;

struct node;

//葉節點為n的哈夫曼樹有2*n-1個節點

//用-1表示當前parent未被訪問

huffmantree createhuffmantree(int *wet, int n)

for( i = 0; i < n; i++)

for(i = n; i < total; i++)

int min1, min2;// 用於標記每輪選出的權重最小的兩個節點

for( i = n; i < total; i++ )

return ht;

}void selectmin(huffmantree ht, int k, int *min1, int* min2)

}*min1 = min;

i = 0;//需要 重新 從頭部掃瞄

while(ht[i].parent != -1 || i == *min1 )

min = i;

for(; i < k; i++ )

} *min2 = min;

//printf("*min1 = %d, *min2 = %d",*min1, *min2);

}void huffmancoding(huffmantree ht, huffmancode *hc, int n)

//huffman編碼最多需要n-1個字元 尾字元 為'\0'

char* code = (char*)malloc(sizeof(char)*n);//每乙個哈夫曼編碼的指標

code[n-1] = '\0';

int i;

for(i = 0; i < n; i++ )

printf("start = %d\n",start);

hc[i] = (char*)malloc(sizeof(char)*(n-start));//n-start為字元編碼位數

if(hc[i] == null)

strcpy(hc[i],&code[start]);

} free(code);

for( i = 0; i < n; i++)

}

int main()

ht = createhuffmantree(wet, n);// 又忘記返回值

huffmancoding(ht, &hc, n);

return 0;

}

實現哈夫曼編碼

include include include include include using namespace std typedef struct node vector nodes 表示結點的指標組 double char number 0 每個字元平均花費的編碼長度 const int cha...

哈夫曼編碼 哈夫曼樹

1.定義 哈夫曼編碼主要用於資料壓縮。哈夫曼編碼是一種可變長編碼。該編碼將出現頻率高的字元,使用短編碼 將出現頻率低的字元,使用長編碼。變長編碼的主要問題是,必須實現非字首編碼,即在乙個字符集中,任何乙個字元的編碼都不是另乙個字元編碼的字首。如 0 10就是非字首編碼,而0 01不是非字首編碼。2....

哈夫曼樹 哈夫曼編碼

定義從a結點到b結點所經過的分支序列為從a結點到b結點的路徑 定義從a結點到b結點所進過的分支個數為從a結點到b結點的路徑長度 從二叉樹的根結點到二叉樹中所有結點的路徑長度紙盒為該二叉樹的路徑長度 huffman樹 帶權值路徑長度最小的擴充二叉樹應是權值大的外界點舉例根結點最近的擴充二叉樹,該樹即為...