回 帖 发 新 帖 刷新版面

主题:[讨论]怎么输出不了哈夫曼树呀.......请各位大侠帮忙!!

 #include<stdio.h>
  #define maxsize  100
  typedef struct node
  {
      int data;
      char name;
      int pat,lc,rc;
  }hafman[maxsize];
1   void  hafmantree(hafman h)
  {
      int n,i;
2      scanf("%d",&n);
3      for(i=1;i<=2*n-1;i++)
      { 
4          h[i].pat=0;
5              h[i].lc=0;
6               h[i].rc=0;
7          if(i<=n)scanf("%d %c",&h[i].data,&h[i].name);
8          else h[i].data=0;h[i].name=0;
      }
9      for(i=1;i<n;i++)
      {
          int x=0,y=0,min=32767,smin=32767;                                                10               for(j=1;j<n+i-1;j++)                                     
11             if(!h[j].pat && h[j].data<min)
              {
12                  smin=min;y=x;x=j;min=h[j].data;}
13            else if(!h[j].pat && h[j].data<smin)
              {
14                  y=j;smin=h[j].data; 
              }
          
          
                  h[x].pat=n+i;
                  h[y].pat=n+i;
                  h[n+i].data=min+smin;
                 h[n+i].lc=x ; 
                                                         
h[n+i].rc= y ;
             h[0].data=2*n-1;
  }
15  void bianma(hafman h)
  {   
      int stack[maxsize],top,j=1;
      int  n=(h[0].data+1)/2 
          
        while(j<=n)
                                   {   int i=j; 
          top=-1 ;
          while(i!=2*n-1)  {  
              if(h[h[i].pat].lc== i) stack[++top ]=0;                  else  stack[++top ]=1;   
            }
            if(h[h[i].pat].rc== i)
               
              i=h[i].pat;  
            }
          while(top>=0)
          {
              printf("%d",stack[top--]);
          }
          printf("\n"); 
          j++;
      }
          
  }
  
  void main()
  {
            hafman ht;
       hafmantree(ht);
      bianma(ht );
       }

回复列表 (共2个回复)

沙发

我也很想帮你啊,可是哈夫曼树的程序有太多方法了,不知道你是怎么写的,说一下你的算法思想啊?
老实说我看到你只用了两个函数就搞定,而且用的是节点数组而不是树数组我就觉得不会对!

板凳


   是的,一个是构造哈夫曼树函数,另外一个就是编码函数了。
   编码函数的算法就是:每一次从哈夫曼树每一个叶子结点开始找,直到找到树根。
如果所找的结点是其父结点左孩子,1入栈,否则0入栈。
   其实我个编码函数没出错,只是在构造函数上出了问题。就是第十行那个循环:
for(j=1;j<n+i-1;j++)      J是要等于=n+i-1的,在课堂上弄了好久,问了同学才发现,最后终于输出了她。
   谢谢你的留言。我用的都是校园网,上个月断网了,所以没有看见,对不起,现在才回。
   我们除了学习数据结构,也学VC++;最近有一道实验,想用到一个函数:它可以把字符转换成浮点型数。请问知道这个函数吗?
   这个函数急用,下星期就要交实验报告了。知道的朋友加我QQ:648118684好吗?

我来回复

您尚未登录,请登录后再回复。点此登录或注册