時間限制:1000ms **長度限制:10kb
題型: 程式設計題 語言: g++;gcc
利用靜態鍊錶建立赫夫曼樹,建樹過程中要求左子樹權值小於右子樹權值,求各結點的編碼。要求:葉子結點的個數n及結點值由鍵盤錄入。本題給出程式**,要求修改以滿足測試要求.
#include 「stdio.h」
#include 「malloc.h」
#include 「string.h」
typedef structhtnode,*huffmantree;
typedef char **huffmancode;
void select(huffmantree &ht, int n, int &s1, int &s2)
//在ht[1…n]中選擇parent為0且weight最小的兩個結點,
// 其序號分別為s1和s2。
for (i=n+1; i<=m; i++)
printf("\n哈夫曼樹的構造過程如下所示:\n");
printf(「ht初態:\n 結點 weight parent lchild rchild」);
for (i=1; i<=m; i++)
printf("\n%4d%8d%8d%8d%8d",i,ht[i].weight,
ht[i].parent,ht[i].lchild, ht[i].rchild);
printf(" 按任意鍵,繼續 …");
getch();
for (i=n+1; i<=m; i++)
//— 從葉子到根逆向求每個字元的哈夫曼編碼 —
cd = (char )malloc(nsizeof(char)); // 分配求編碼的工作空間
cd[n-1] = 『\0』; // 編碼結束符。
for (i=1; i<=n; ++i)
free(cd); //釋放工作空間
} //huffmancoding
void main()
htnode,
*huffmantree;
typedef
char
**huffmancode;
void
select
(huffmantree &ht,
int n,
int&s1,
int&s2)
//在ht[1..n]中選擇parent為0且weight最小的兩個結點,其序號分別為s1和s2。
void
createhuffmantree
(huffmantree &ht,
int n)
// for
(i=n+
1; i<=m; i++
)for
(i=n+
1; i<=m; i++)}
void
huffmancoding
(huffmantree &ht,huffmancode &hc,
int n)
free
(cd);}
intmain()
free
(hc)
;free
(ht)
;}
SCAU 資料結構練習 8609 哈夫曼樹
description 利用靜態鍊錶建立赫夫曼樹,建樹過程中要求左子樹權值小於右子樹權值,求各結點的編碼。要求 葉子結點的個數n及結點值由鍵盤錄入。本題給出程式 要求修改以滿足測試要求.include stdio.h include malloc.h include string.h typedef...
哈夫曼編碼 哈夫曼樹
1.定義 哈夫曼編碼主要用於資料壓縮。哈夫曼編碼是一種可變長編碼。該編碼將出現頻率高的字元,使用短編碼 將出現頻率低的字元,使用長編碼。變長編碼的主要問題是,必須實現非字首編碼,即在乙個字符集中,任何乙個字元的編碼都不是另乙個字元編碼的字首。如 0 10就是非字首編碼,而0 01不是非字首編碼。2....
哈夫曼樹 哈夫曼編碼
定義從a結點到b結點所經過的分支序列為從a結點到b結點的路徑 定義從a結點到b結點所進過的分支個數為從a結點到b結點的路徑長度 從二叉樹的根結點到二叉樹中所有結點的路徑長度紙盒為該二叉樹的路徑長度 huffman樹 帶權值路徑長度最小的擴充二叉樹應是權值大的外界點舉例根結點最近的擴充二叉樹,該樹即為...