// 哈夫曼樹.cpp: 定義控制台應用程式的入口點。
// 陳鵬
#include "stdafx.h"
#include "stdio.h"
#include "malloc.h"
#define maxsize 100
typedef struct shuzhu shuzhu;
//這顆哈夫曼樹沒有資料型別 只有權值 如果要加入資料 那就在14行加入 char a; 寫入資料的時候加入讀取 a並儲存 就行了
typedef struct htree htree;
shuzhu arr[maxsize];
int t = 0;
//----------------------建立資料-----------------------------
//寫入資料
void init(int w, int t)
//使用者輸入
void xieru()
}//輸出資料
void prints()
}//----------------------建立資料結束-----------------------------
//----------------------堆排序-----------------------------------
//落底
void duiluodi(int n, int k)
int a1 = _crt_int_max; //設定兩個最大值
int a2 = _crt_int_max;
if (k1 < n)a1 = arr[k1].p->weight; //如果左邊節點純在 因為傳進來的數字為t t標識的是長度從1開始計數 而堆是從0開始計數的
if (k2 < n)a2 = arr[k2].p->weight; //如果右邊節點純在
if (arr[k].p->weight < a1&&arr[k].p->weight < a2)return; //節點比自己的兩個孩子的權值都小 次節點棧排序完成
//否則進行排序
if (a1 < a2)
else
} //初始排序構成堆
void duiinit()
} //插入元素
void duicharu(htree *p)
//取出乙個
htree *duiout()
//----------------------堆排序-----------------------------------
//----------------------構成哈夫曼樹-----------------------------
htree *htreego()
h = duiout(); //上面for迴圈結結束 最後堆裡面還剩乙個元素 這個元素就是哈夫曼樹的頭
return h; //將這個頭給返回出去
}//----------------------構成哈夫曼樹-----------------------------
//先序遍歷
void xianxu(htree *h)
}//字元編碼
//構造哈夫曼編碼
void huffmancoding(htree * fbt, int len) else
} }void main()
哈夫曼樹及哈夫曼編碼 C
說明 1.讀取檔案中需進行哈夫曼編碼的資料資訊 2.構造生成單節點二叉樹組 森林 3.構造哈夫曼樹 4.進行哈夫曼編碼 5.輸出對應資料及其編碼 include include includeusing namespace std const int max n 100 最大容量 const int...
哈夫曼編碼 哈夫曼樹
1.定義 哈夫曼編碼主要用於資料壓縮。哈夫曼編碼是一種可變長編碼。該編碼將出現頻率高的字元,使用短編碼 將出現頻率低的字元,使用長編碼。變長編碼的主要問題是,必須實現非字首編碼,即在乙個字符集中,任何乙個字元的編碼都不是另乙個字元編碼的字首。如 0 10就是非字首編碼,而0 01不是非字首編碼。2....
哈夫曼樹 哈夫曼編碼
定義從a結點到b結點所經過的分支序列為從a結點到b結點的路徑 定義從a結點到b結點所進過的分支個數為從a結點到b結點的路徑長度 從二叉樹的根結點到二叉樹中所有結點的路徑長度紙盒為該二叉樹的路徑長度 huffman樹 帶權值路徑長度最小的擴充二叉樹應是權值大的外界點舉例根結點最近的擴充二叉樹,該樹即為...