main
#include "Header.h"
#include "typ.h"
#include "func.h"
using namespace std;
const int N = 1e5;
int w[N];
int main()
{
HuffmanTree HT;
HuffmanCode HC;
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>w[i];
}
CreatHT(HT,w,n);
HuffmanCoding(HT,HC, n);
string s;
cout<<"请输入编码:"<<endl;
cin>>s;
HuffmanDecode(HT,s,2*n-1);
return 0;
}
func.h
void select(HuffmanTree HT,int e,int &s1,int &s2)
{
int mi = 1e9;
for(int i=1;i<=e;i++)
{
if(HT[i].p==0&&HT[i].w<mi)
{
mi = HT[i].w;
s1 = i;
}
}
mi = 1e9;
for(int i=1;i<=e;i++)
{
if(HT[i].p==0&&HT[i].w<mi&&i!=s1)
{
mi = HT[i].w;
s2 = i;
}
}
}
void CreatHT(HuffmanTree &HT,int w[],int n)
{
if(n<=1) return ;
int m = n*2-1;
HT = (HuffmanTree)malloc(sizeof(HTNode)*(m+1));
if(!HT) exit(OVERFLOW);
else
{
for(int i=1; i<=m; i++)
{
if(i<=n) HT[i]={w[i],0,0,0};
else HT[i]={0,0,0,0};
}
for(int i=n+1;i<=m;i++)
{
int s1,s2;
select(HT,i-1,s1,s2);
HT[s1].p = i; HT[s2].p = i;
HT[i].lchild = s1; HT[i].rchild = s2;
HT[i].w = HT[s1].w + HT[s2].w;
}
}
cout<<"HT:"<<endl;
for(int i=1; i<=m; i++)
{
cout<<HT[i].w<<" "<<HT[i].p<<" "<<HT[i].lchild<<" "<<HT[i].rchild<<endl;
}
}
void HuffmanCoding(HuffmanTree HT,HuffmanCode &HC,int n)
{
HC = (HuffmanCode)malloc((n+1)*sizeof(char *));
char* cd = (char*)malloc(n*sizeof(char));
cd[n-1] = '\0';
for(int i=1; i<=n; i++)
{
int start = n-1;
int j,f;
for(j=i,f=HT[i].p; f!=0; j=f,f=HT[f].p)
{
if(HT[f].lchild==j) cd[--start] = '0';
else cd[--start] = '1';
}
HC[i] = (char*)malloc((n-start)*sizeof(char));
strcpy(HC[i],&cd[start]);
}
free(cd);
cout<<"HTcode:"<<endl;
for(int i=1 ;i<=n; i++)
{
cout<<HT[i].w<<" "<<HC[i]<<endl;
}
}
void HuffmanDecode(HuffmanTree HT,string s,int m)
{
for(int i=0,j=m; i<s.size(); i++)
{
if(s[i]=='0') j = HT[j].lchild;
else j = HT[j].rchild;
if(HT[j].lchild==0)
{
cout<<HT[j].w<<" ";
j = m;
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话