⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hafuman.cpp

📁 哈夫曼编码.很经典的数据结构程序.C语言程序实现.
💻 CPP
字号:
# include <iostream.h>
# define n 5
# define m 2*n-1
# define max 1000
//哈夫曼树型结构//
typedef struct
{
	int wi;
	char data;
	int parent,Lchild,Rchild;
}huffm;
//哈夫曼编码结构//
typedef struct
{
	int bits[n];
	int number;
	char data;
}Hcode;


//-------哈夫曼树---------//
void huffmTree(huffm HT[m+1])       
{
	
	int i,j,w,s1,s2,p1,p2;
	for(i=1;i<=m;i++)        //初始化哈夫曼树//   
	{
		HT[i].wi=0;
		HT[i].parent=0;
		HT[i].Lchild=0;
		HT[i].Rchild=0;
	}
	for(i=1;i<=n;i++)
	{
		cout<<"请输入第"<<i<<"个字符:\t";
		cin>>HT[i].data;
		cout<<"请输入该字符的权值:\t";
		cin>>w;
		HT[i].wi=w;
		cout<<"\n";
	}
		cout<<endl;
	//找出最小值//
	for(i=n+1;i<=m;i++)
	{
		p1=p2=0;
		s1=s2=max;
		for(j=1;j<=i-1;j++)
		{
			if(HT[j].parent==0)
			{
				if(HT[j].wi<s1)
				{
					s2 = s1;
					s1 = HT[j].wi;			     //此时j结点是第一个最小值
					p2 = p1;
					p1 = j;
				}
				else if(HT[j].wi<s2)
				{
					s2 = HT[j].wi;              //此时j结点是第二个最小值
					p2=j;
				}				
			}			
		}
		HT[p1].parent = HT[p2].parent = i;		//构造新树//
		HT[i].Lchild = p1;
		HT[i].Rchild = p2;
		HT[i].wi = HT[p1].wi + HT[p2].wi;
	}
	for(i=1;i<=m;i++)
	{
		cout<<"哈夫曼树的权是:"<<HT[i].wi<<endl;
	}
	cout<<endl;
}
//---------哈夫曼编码--------//
void HuffmCode()
{
	
	int i,j,p,s;
	huffm HT[m+1];
	Hcode cd;
	Hcode code[n+1];
	huffmTree(HT);
	for(i=1;i<=n;i++)
	{
		code[i].data = HT[i].data;
	}
	cout<<"字符\t"<<"哈夫曼权值\t"<<"哈夫曼编码"<<endl;
	for(i=1;i<=n;i++)
	{
		cd.data = code[i].data;
		cd.number = 0;
		s = i;
		p = HT[i].parent;
		while(p!=0)
		{
			cd.number++;
			if(HT[p].Lchild == s)
				cd.bits[cd.number] =0;
			else
				cd.bits[cd.number] =1;
			s = p; 
			p = HT[p].parent;
		
		}
		code[i] = cd;
		cout<<code[i].data<<"\t"<<HT[i].wi<<"\t\t";
			for(j=1;j<=cd.number;j++)
			{
				cout<<code[i].bits[j];
			}
			cout<<endl;
			
		}
}
//主函数//

void main(void)
{
	cout<<"//******************************//"<<endl;
	cout<<"               哈夫曼树           "<<endl;
	cout<<"             杨忠 20028717        "<<endl;
	cout<<"//******************************//"<<endl;
	cout<<"如果哈夫曼树的结点为5个\n"<<endl;
	HuffmCode();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -