树和二叉树实验七哈夫曼编码哈夫曼编码1. 问题描述设某编码系统共有n 个字符, 使用频率分别为{ w1, w2, ⋯ , wn} ,设计一个不等长的编码方案,使得该编码系统的空间效率最好。2. 基本要求⑴ 设计数据结构;⑵ 设计编码算法;⑶ 分析时间复杂度和空间复杂度。3. 编码#include #include using namespace std; const int Size=10,Size1=50; struct element { int weight; int lchild,rchild,parent; }; char s[Size];int w[Size],w1[Size]; int getW(char T1[]) //统计字母频率,获得权值{ char T[Size1]; strcpy(T,T1); char c;int count,k=0; for(int i=0;T[i]!='\0';i++) { count=0; if(T[i]>='a'&&T[1]<='z') { c=T[i]; s[k]=c;s[k+1]='\0'; } 树和二叉树if(c!='\0') { for(int j=0;T[j]!='\0';j++) { if(T[j]==c) { count++; T[j]='$'; } } } if(c!='\0') { w1[k]=count; w[k++]=count; } c='\0'; } return k; } void Select(element h[],int &i3,int &i4)//获得哈夫曼数组中权值最小的两个下标{ int c; i3=-1;i4=-1; for(int i=0;i3==-1;i++) if(h[i].parent==-1) i3=i; for(i;i4==-1;i++) if(h[i].parent==-1) i4=i; if(h[i3].weight>h[i4].weight) { c=i3; i3=i4; i4=c; } for(i;h[i].weight>0;i++) { if(h[i].parent==-1) 树和二叉树if(h[i].weight