Huffman树
小弟自己写的Huffman树,算作这段时间的练习和提升功力的机会在这个过程中也是学会了很多,等过了这段时间再优化一下代码,
不说了,小弟去复习量子力学了{:10_266:} ,加油!!!
**** Hidden Message *****
{:5_95:} 666 困惑我好久了,都没写出来,楼主给看个源代码呗{:5_101:} fanyifan 发表于 2018-6-17 13:59
困惑我好久了,都没写出来,楼主给看个源代码呗
我发了我的GitHub的地址,你可以上一下那个网址看一下。 不熟悉GitHub的朋友也可以在这里下载源工程。 加油
支持
来看一下
加油 加油 Jiangxi nbnb
1
{:5_110:} 1 #include<iostream>
using namespace std;
typedef struct{
int weight;
int parent,lchild,rchild;
}HTNode,*huffmanTree;
CreatHuffmanTree(HuffmanTree &HT,int n);
void Select(HuffmanTree HT,int m,int &s1,int &s2)
{
min1=min(HT,m);
min2=min(HT,m);
}
int min(HUffmanTree HT,int m)
{
int i=0;
int min;
int min_weight;
while(HT.parent!=0)
i++;
min_weight=HT.weight;
min=i;
for(;i<m;i++)
{
if(HT.weight<min_weight && HT.parent==0)
{
min_weight=HT.weight;
min=i;
}
}
HT.parent=1;
return min;
}
void CreatHuffmanTree(HuffmanTree &HT,int n)
{
if(n<=1) return;
m = 2*n-1;
HT = new HTNode;
for(int i=1;i<=m;i++)
{
HT.parent=0;
HT.lchild=0;
HT.rchild=0;
}
for(int i=1;i<=n;++i)
cin>>HT.weight;
for(k=n+1;i<=m;i++)
{
Select(HT,k-1,s1,s2);
HT.parent=k;
HT.parent=k;
HT.lchild=s1;
HT.rchild=s2;
HT.weight=HT.weight+HT.weight;
}
}
typedef char **HuffmanCode;
void CreatHuffmanCode(Huffman HT,HuffmanCode &HC,int n)
{
HC=new char*;
cd=new char;
cd='\0';
for(i=1;i<=n;i++)
{
start=n-1;
c=i;f=HT.parent;
while(f!=0)
{
--start;
if(HT.lchild==c)
cd='0';
else
cd='1';
c=f;
f=HT.parent;
}
HC=new char;
strcpy(HC,&cd);
}
delete cd;
}
int main()
{
void Select(HuffmanTree HT,int m,int &s1,int &s2);
int min(HUffmanTree HT,int m);
void CreatHuffmanTree(HuffmanTree &HT,int n);
void CreatHuffmanCode(Huffman HT,HuffmanCode &HC,int n);
int n;
cout<<"请输入结点个数:"<<endl;
cin>>n;
HTNode *Huffman=new HTNode;
int *weight=new int;
char **HC=new char*;
cout<<"请输入"<<n<<"个权值:";
CreatHuffmanTree(huffmanTree,n);
CreatHuffmanCode(,huffman HT,huffmancode HC,n);
cout<<"输出哈夫曼编码:"<<endl;
}
666 {:5_103:} 发
页:
[1]
2