C 程式設計賽 1 哈夫曼樹

2021-09-30 18:15:00 字數 1186 閱讀 5534

#includeusing namespace std;

int m = 0;

typedef struct htnode, *huffmantree; //動態分配陣列儲存哈夫曼樹

typedef char *huffmancode; //動態分配陣列儲存哈夫曼編碼表

void select(huffmantree ht, int n,int &s1,int &s2)

for (j = i + 1; j <= n; j++)

if (!ht[j].parent)

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

if ((ht[s1].weight>ht[i].weight) && (!ht[i].parent) && (s2 != i))s1 = i;

for (j = 1; j <= n; j++)

if ((ht[s2].weight>ht[j].weight) && (!ht[j].parent) && (s1 != j))s2 = j;

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

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

for (i = n + 1; i <= m; i++)

else

ht[i].weight = ht[s1].weight + ht[s2].weight;

} printf(" 下標 權值 父親 左孩子 右孩子");

for (j = 1; j <= i-1; j++)

//------無棧非遞迴遍歷哈夫曼樹,求哈夫曼編碼

cd = (char *)malloc(n*sizeof(char)); // 分配求編碼的工作空間

p = m; cdlen = 0;

for (i = 1; i <= m; ++i) // 遍歷哈夫曼樹時用作結點狀態標誌

ht[i].weight = 0;

while (p)

else if (ht[p].rchild == 0)

} else if (ht[p].weight == 1)

} else

}} // huffmancoding

void main()

getchar();

}

哈夫曼樹 1

題目1172 哈夫曼樹 題目描述 哈夫曼樹,第一行輸入乙個數n,表示葉結點的個數。需要用這些葉結點生成哈夫曼樹,根據哈夫曼樹的概念,這些結點有權值,即weight,題目需要輸出所有結點的值與權值的乘積之和。輸入 輸入有多組資料。每組第一行輸入乙個數n,接著輸入n個葉節點 葉節點權值不超過100,2 ...

哈夫曼樹及哈夫曼編碼 C

說明 1.讀取檔案中需進行哈夫曼編碼的資料資訊 2.構造生成單節點二叉樹組 森林 3.構造哈夫曼樹 4.進行哈夫曼編碼 5.輸出對應資料及其編碼 include include includeusing namespace std const int max n 100 最大容量 const int...

哈夫曼編碼 哈夫曼樹

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