用C語言實現哈夫曼樹

2021-09-30 09:49:19 字數 1799 閱讀 4068

//哈夫曼樹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中選取根結點的權值最小和次小的兩棵二叉樹作為左,右子樹構造一棵新的二叉樹,這棵...