网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C/C++
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.C++语言学习之从结构到类.
.罗云彬VxD教程--DeviceIoControl.
.指针与数组.
.Win2K/NT下屏蔽Ctrl+Alt+Del的响.
.在 C++ 程序中导出 Word 文档的方.
.在CB环境中实现在菜单中显示历史.
.内 存 问 题.
.在CB程序中控制Windows关机.
.双向链表的排序.
..
.VC++实现混合静态分裂视窗的方法.
.使用 C++ Builder&nbs.
.C语言链表的创建与排序.
.C/C++笔试、面试题目大汇总.
.VC实现系统热键激活后台服务程序.
.一个简易的proxy程序的开发过程(.
.CGI编程的安全性 -- 文件名.
.解决网爬工具爬取页面信息出现乱.
.高质量C++/C编程指南 --&nb.
.开发精彩实例:窗体自动隐藏.

数据结构:哈夫曼树的应用

发表日期:2008-3-8


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>a
#include<graphics.h>
#define MAXVALUE 200           /*权值的最大值*/
#define MAXB99v  30             /*最大的编码位数*/
#define MAXNODE 30             /*初始的最大的结点数*/
 strUCt haffnode
         {char data;
   int weight;
                        int flag;
                        int parent;       /*双亲结点的下标*/
                        int leftchild;    /*左孩子下标*/
                        int rightchild;   /*右孩子下标*/
         };
 struct haffcode
         {int bit[MAXNODE];
                        int start;        /*编码的起始下标*/
   char data;
   int weight;       /*字符权值*/
         };  
/*函数说明*/
/************************************************************************/
void pprintf(struct haffcode haffcode[],int n);
/*输出函数*/
void haffmantree(int weight[],int n,struct haffnode hafftree[],char data[]);
/*建立哈夫曼树*/
void haffmancode(struct haffnode hafftree[],int n,struct haffcode haffcode[]);
/*求哈夫曼编码*/
void test(struct haffcode haffcode[],int n);
/*测试函数*/
void end();
/*结束界面函数*/
/************************************************************************/  
void haffmantree(int weight[],int n,struct haffnode hafftree[],char data[])
    /*建立叶结点个数为n,权值数组为weight[]的哈夫曼树*/
    {int i,j,m1,m2,x1,x2;
     /*哈夫曼树hafftree[]初始化,n个叶结点共有2n-1个结点*/
         for(i=0;i<2*n-1;i++)
        {if(i<n)  {hafftree[i].data=data[i];
     hafftree[i].weight=weight[i];   /*叶结点*/
           }
         else     {hafftree[i].weight=0;           /*非叶结点*/
     hafftree[i].data='\0';
     }
         hafftree[i].parent=0;                     /*初始化没有双亲结点*/
                              hafftree[i].flag=0;
         hafftree[i].leftchild=-1;
                              hafftree[i].rightchild=-1;
                             }
   for(i=0;i<n-1;i++)                              /*构造哈夫曼树n-1个非叶结点*/
                            {m1=m2=MAXVALUE;
                             x1=x2=0;
        for(j=0;j<n+i;j++)
     {if(hafftree[j].weight<m1&&hafftree[j].flag==0)
                                         {m2=m1;
                                          x2=x1;
                                          m1=hafftree[j].weight;
                                          x1=j;
                                         }
      else if(hafftree[j].weight<m2&&hafftree[j].flag==0)
                                            {m2=hafftree[j].weight;
                                             x2=j;
                                            }
                                  }
                                  hafftree[x1].parent=n+i;
                                  hafftree[x2].parent=n+i;
                     

上一篇:C++箴言:必须返回对象时别返回引用 人气:492
下一篇:通用子目录文件显示方法 人气:682
浏览全部C/C++的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐