//哈夫曼樹c語言實現
#include #include typedef struct huffmannode
huffmannode;
typedef struct heapnode
heapnode;
/*------------------全域性變數----------------------*/
int heapsize;//堆大小
int num;//記錄字元數量
heapnode *heap;//堆陣列
char *letter;//字元陣列
int *rate;//字元出現頻率
huffmannode **array; //記錄葉節點的陣列,列印編碼的時候可以從葉結點回溯向上
char ch;
/*----------------------函式宣告-------------------------*/
void init(int numofletters);//初始化變數
void input();//輸入陣列
int parent(int i);//求父節點
int left(int i);//求左孩子
int right(int i);//求右孩子
void swap(int i,int j);//交換函式
void heapify(int i,int localheapsize);//維持堆性質函式,使用前提為左右子樹均為最小堆
void buildheap();//初始化堆
heapnode* extractmin();//去掉並返回堆中最小的元素
void heapinsert(int rate,huffmannode *p);//向堆中插入資料(前提:堆已經初始化)
huffmannode* buildtree();//構造哈夫曼樹
void display();//顯示函式
void backprint(huffmannode *p,huffmannode *root);//從葉節點回溯列印編碼code
/*----------------------函式實現-------------------------*/
void init(int numofletters)
void input()
}int parent(int i)
int left(int i)
int right(int i)
void swap(int i,int j) //交換結構體陣列,需要交換結構體內資料
void heapify(int i,int localheapsize)//維持堆性質函式,使用前提為左右子樹均為最小堆
if(r<=localheapsize&&heap[least].rate>heap[r].rate)
if(least!=i)
}void buildheap()//初始化堆
}heapnode* extractmin()
else
}void heapinsert(int rate,huffmannode *p)
heap[i].rate=rate;
heap[i].node=p;
}huffmannode* buildtree()
return extractmin()->node;
}void display()
}void backprint(huffmannode *p,huffmannode *root)
}int main(int argc ,char* ar**)
C語言實現哈夫曼樹
include include typedef struct nodebinode void show binode root if root r null 哈夫曼樹 void a1 權值陣列,為方便直接從小到大有序 int n 6,x,y,z,i,j binode root null binode...
C語言實現哈夫曼樹
ddl是第一生產力,公理 哈夫曼樹又稱最優二叉樹。它是 n 個帶權葉子結點構成的所有二叉樹中,帶權路徑長度 wpl 最小的二叉樹。就是構造乙個哈夫曼樹,然後輸出最小帶權路徑 wpl 大致思路 每個結點自成一棵樹,成森林 選擇所有樹的根結點 不為null 中權值最小的兩個,合併,新malloc乙個節點...
哈夫曼樹編碼C語言實現
哈夫曼樹編碼c語言實現,實現哈夫曼樹編碼的演算法可分為兩大部分 1 構造哈夫曼樹 2 在哈夫曼樹上求葉結點的編碼 哈夫曼樹構造演算法 1 由給定的n個權值構造n棵只有乙個葉結點的二叉樹,從而得到乙個二叉樹的集合f 2 在f中選取根結點的權值最小和次小的兩棵二叉樹作為左,右子樹構造一棵新的二叉樹,這棵...