c语言实现哈夫曼编/译码器

本文介绍了如何使用C语言实现哈夫曼编码算法,包括创建哈夫曼树、文件导入、编码、解码、以及打印编码和哈夫曼树的过程。
摘要由CSDN通过智能技术生成

         

  • 初始化.从终端读入字符集大小n及n个字符和n个权值,建立哈夫曼树,井将它存

于文件HuffmanTree中。

  • 编码。利用已建立好的哈夫曼树(如不在内存,则从文件HuffmanTree中读入)。对文件tobetrans中的正文进行编码,然后将结果存入文件codefile中。
  • 解码。利用已建立好的哈夫曼树将文件codefile中的代码进行译码,结果存入testfile中。
  • 打印代码文件。将文件codefile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码文件写入文件codeprint中。
  • 打印哈夫曼树。将已在内存中的哈夫曼树直观的方式(树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件treeprint中。
  • # include<stdio.h>
    # include<stdlib.h>
    # include<string.h>
    
    typedef struct  Htree 
    {
    	char c;
    	int weight; 
    	int parent,lchild,rchild;
    }Htree,*HuffmanTree;
    
    typedef char ** HuffmanCode;
    //选择权重值最小的下标 
    int  select(HuffmanTree Ht,int n)
    {	int min,i;
    	for(i=1;i<=n;i++)
    	{
    		if(Ht[i].parent == 0)
    		{
    			min=i;
    			break;
    		}
    	}
    	for(i=i+1;i<=n;i++)
    	{
    		if(Ht[i].parent == 0)
    		{
    			if(Ht[i].weight<Ht[min].weight)	
    				min=i;
    		}
    	}
    	return min;
    }
    //创建哈夫曼树 
    void CreatHuffmanTree(HuffmanTree &Ht,int n)
    {
    	int i,j,m,a,b;
    	m=2*n-1;
    	Ht=new Htree[m+1];
    	Ht[0].weight=n;//储存顺序表有多少个元素 
    	for(i=1;i<=m;i++)
    	{
    		Ht[i].lchild=Ht[i].rchild=Ht[i].parent=0; 
    	}
    	for(i=1;i
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值