8609 哈夫曼樹

2021-10-05 14:26:45 字數 1578 閱讀 9606

時間限制: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樹 帶權值路徑長度最小的擴充二叉樹應是權值大的外界點舉例根結點最近的擴充二叉樹,該樹即為...