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

📄 sl.cpp

📁 哈夫曼编码.很经典的数据结构程序.C语言程序实现.
💻 CPP
字号:
# include <iostream.h>
# define n 4
# define m 2*n-1
# define M 100
typedef struct TreeNode
{
	int wi;
	char data;
	int parent,Lchild,Rchild;
}HTNode;
typedef struct code
{
	int string[n];
	int num;
	char data;
}HuffmanCode;
void select(HTNode HT[m+1])       
{
	int i,j,s1,s2,x1,x2;
	for(i=n+1;i<=m;i++)
	{
		x1=x2=0;
		s1=s2=M;
		for(j=1;j<=i-1;j++)
		{
			if(HT[j].parent==0)
			{
				if(HT[j].wi<s1)
				{
					s2 = s1;
					s1 = HT[j].wi;			     
					x2 = x1;
					x1 = j;
				}
				else if(HT[j].wi<s2)
				{
					s2 = HT[j].wi;              
					x2=j;
				}				
			}			
		}
		HT[x1].parent = HT[x2].parent = i;		
		HT[i].Lchild = x1;
		HT[i].Rchild = x2;
		HT[i].wi = HT[x1].wi + HT[x2].wi;
	}

}
void main(void)
{
	int i,j,p,s;
	HuffmanCode CD;
	HuffmanCode code[n+1];
	HTNode HT[m+1];
	for(i=1;i<=m;i++)          
	{
		HT[i].wi=HT[i].parent=HT[i].Lchild=HT[i].Rchild=0;
	}
	cout<<"代码有4个"<<endl;
	for(i=1;i<=n;i++)
	{
		cout<<"请输入第"<<i<<"个字符:\t";
		cin>>HT[i].data;
		cout<<"请输入该字符的权值:\t";
		cin>>HT[i].wi;
		cout<<"\n";
	}
		cout<<endl;
	select(HT);
	for(i=1;i<=n;i++)
	{
		code[i].data = HT[i].data;
	}
	cout<<"哈夫曼编码"<<endl;
	for(i=1;i<=n;i++)
	{
		CD.data = code[i].data;
		CD.num = 0;
		s = i;
		p = HT[i].parent;
		while(p!=0)
		{
			CD.num++;
			if(HT[p].Lchild == s)
				CD.string[CD.num] =0;
			else
				CD.string[CD.num] =1;
			s = p; 
			p = HT[p].parent;
		
		}
		code[i] = CD;
		cout<<code[i].data<<"\t\t";
			for(j=1;j<=CD.num;j++)
			{
				cout<<code[i].string[j];
			}
			cout<<endl;
			
		}
}



⌨️ 快捷键说明

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