哈弗曼树
假设用于通信的电文由n个字符组成,字符在电文中出现的频度(权值)为w1,w2,…,wn,试根据该权值序列构造哈夫曼树,并计算该树的带权路径长度。
第1行为n的值,第2行为n个整数,表示字符的出现频度。
输出所构造哈夫曼树的带权路径长度。
输入示例:
8
7 19 2 6 32 3 21 10
输出:
261
也可使用c++的最小堆实现优先级队列实现此算法,效率较高,由于不想使用c++,就自己实现了有序链表来完成此题
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int data;
struct node *next;
}Linklist;
//创建链表
Linklist* create(int array[],int n){
int i;
Linklist *head,*p,*q;
head=(Linklist *)malloc(sizeof(Linklist));
head->next=p=q=NULL;
for(i=0;i<n;i++){
q=(Linklist