Huffman编码C实现

2014-11-24 03:07:33 · 作者: · 浏览: 4

Huffman编码:根据Huffman树进行编码的,用到的数据结构是二叉树。

typedef int elemtype;
typedef struct 
{
  elemtype weight;
  int parent,l_child,r_child;
} binarytree;

//2、构建最优二叉树
void CreateHuffman(int leafnum, binarytree *huffmantree)
{
    //leafnum个叶子,决定nodenum个结点数
	int nodenum=2*leafnum-1;
	huffmantree=(binarytree *)malloc(nodenum*sizeof(binarytree));   //0号单元也使用
	
	//leafnum个叶子,决定nodenum个结点数,也决定了(nodenum-1)个bit位编码
	char *huffmancode;
	huffmancode =(char *)malloc((nodenum-1)*sizeof(char));

	//huffmantree的初始化:叶子结点data权值手动输入,非叶子默认值都为0
	cout<<"请输入叶子权值:";
	int i;
	for(i=0;i>huffmantree[i].weight;
		}
		else
		{
		   huffmantree[i].weight=0;
		}
		huffmantree[i].parent=huffmantree[i].l_child=huffmantree[i].r_child=0;
	}

	int j; 
	//j从leafnum开始,指的是包含了新建子树的结点编号
	for(j=leafnum;j>leafnum;
   CreateHuffman( leafnum, T);
   while(1);
}

编译结果如下:

\

\