设计程序以实现构造哈夫曼树的哈夫曼算法
来源:互联网 发布:京东域名 编辑:程序博客网 时间:2024/06/05 14:45
//数据结构课程设计、
//设计程序以实现构造哈夫曼树的哈夫曼算法。
//要求:使用实验工具的有关功能;要能有演示过程;求解出所构造的哈夫曼
//树的带权路径长度。
#include"btreint.h"
int count=0;
//数据的个数;
bitre data[50];//存储数组
void delete_min()//获得最小元素、
{
for(int i=1;i<=count-2;i++)
data[i]=data[i+2];
}
int tree_insert(bitre t)//插入新的节点;
{ if(t->data>=data[count]->data){data[++count]=t;return 0;}
else{int m;
for(int j=1;j<=count;j++)
if(data[j]->data>=t->data){m=j;break;}
for(int k=count;k>=m;k--)
data[k+1]=data[k];
data[m]=t;
count++;}
}
int num=0;
get_long(bitre t)//求解huffman树的带权路径长度;
{
if(t!=NULL)
{
if(t->rchild!=NULL&&t->lchild!=NULL)
{
visite_bnode(t,1);
num=num+t->data;
get_long(t->lchild);
get_long(t->rchild);
}
}
}
void main()
{
cout<<endl<<endl<<endl<<endl;
cout<<" ***************************************"<<endl;
cout<<" * Construct Huffman Tree *"<<endl;
cout<<" * Name: XuHua *"<<endl;
cout<<" * Number: 20042297 *"<<endl;
cout<<" ***************************************"<<endl<<endl<<endl<<endl;
bitre a,b,t; //定义变量;
cout<<"please put in the data and in increased way and -9999 over "<<endl;
for(int i=1;i<=50;i++)//输入数据;
{
int adj;
data[i]=(bitre)malloc(sizeof(struct bnode));//数据存储;
if(i==1){data[0]->data=0;}
cin>>adj;
if(adj==-9999){cout<<"put in over "<<endl;break;}//结束标志;
data[i]->data=adj;count++;
}
//数据元素,
//数据的存储;
for(int y=1;y<=count;y++)//整理存储的数据;
for(int x=count;x>y;x--)
if(data[x]->data<data[x-1]->data)
{
int shu=data[x]->data;
data[x]->data=data[x-1]->data;
data[x-1]->data=shu;
}
for(int j=1;j<=count;j++)
{data[j]->lchild=NULL;data[j]->rchild=NULL;}//huffman树构造过程;
while(count>1)
{
a=data[1];b=data[2];//得到最小的两个节点;
t=(bitre)malloc(sizeof(struct bnode));
t->lchild=a;
t->rchild=b;
t->data=a->data+b->data;
delete_min();
count=count-2;
tree_insert(t);
display_bitre("tree",t);//显示此时的huffman树;
Wait();
}
get_long(t);
cout<<"WL="<<num<<endl;//输出带权路径长度;
Wait();
}
- 设计程序以实现构造哈夫曼树的哈夫曼算法
- 哈夫曼树的构造算法,哈夫曼编码算法
- 哈夫曼树的构造算法
- 构造哈夫曼树的算法
- 中国象棋程序的设计与实现(八)-如何构造一个棋子(車馬炮等)
- 斗地主算法的设计与实现(一)--项目介绍&如何定义和构造一张牌
- 以private构造器实现对象的singleton
- 这样一个不可以实现的程序
- 构造后缀数组的DC3算法实现
- 倍增算法实现后缀数组的构造
- 设单链表以非递减有序排列,设计算法实现在单链表中删去值相同的多余结点。
- 设单链表以非递减有序排列,设计算法实现在单链表中删除值相同的多余结点
- 模式识别经典算法——Kmeans图像聚类分割(以最短的matlab程序实现)
- 模式识别经典算法——Kmeans图像聚类分割(以最短的matlab程序实现)
- 中国象棋程序的设计与实现(六)--N皇后问题的算法设计与实现(源码+注释+截图)
- Dinic算法的程序实现
- 实现算法2.1的程序
- 实现算法2.2的程序
- 17. 相关软件 /AsciiArt跨站讲座第一讲--CHM版下载
- MySpace的六次重构
- 由265的收购事件想起流氓软件
- 程序员网站资源宝库
- 子网掩码的计算与划分详解
- 设计程序以实现构造哈夫曼树的哈夫曼算法
- Windows 2003上网络负载均衡的实现
- 汇编写的(交集,并集,差集)
- placement new的使用
- 企业要善待业务技术人员
- GCC中文使用手册
- 山城的雨
- C动态内存分配几个细节
- kruskal 算法实现