6つの実験= 3345二分木データ構造:ハフマン符号化

1の#include <stdio.hの>
 2の#include <STDLIB.H>
 3の#include < 文字列・H>
 4  チャー S [ 2000 ]。
5  int型 NUM [ 2000 ]、キュー[ 2000 ];
6  ボイドので(INT S []、INT L、INT R)
 7  {
 8      場合(L> = R)リターン;
9      INT iはLを=、J = R。
10      INT一時= S [L]。
11      一方(I < J)
 12     {
 13          ながら(I <J && S [J]> = TEMP)j-- 14の          S [I] = S [J]。
15          一方(I <J && S [i]が<= TEMP)iが++ ;
16の          S [J] = S [i]は、
17      }
 18      S [I] = TEMP。
19      それほど(S、L、I- 1 )。
20      したがって、(S、I + 1 、R)。
21  }
 22  のint main()の
 23  {
 24      ながら(〜のscanf(" %S " 、S))
 25      {
 26          int型のトップ=0 、I;
27          INT LEN = STRLEN(S)。
28          のmemset(NUM、0はsizeof (NUM))。
29          のmemset(キュー、0はsizeof (キュー))。
30          のためには、(iは= 0 ; iは<lenは、I ++ 31          {
 32              NUM [S [I]] ++ ;
33          }
 34          のためには、式(I = 0、I < 500 ; I ++ 35          {
 36              であれば(NUMを[I] =!0 37             {
 38                  キュー[トップ++] = NUM [I]。
39              }
 40          }
 41          それほど(キュー、0、トップ1 )。
42は、         INT =こと0 43          INTの和= 0 44  // ----------------------------------------------- ----------------------- 
45          ながら(BE =!トップ)
 46          {
 47              INT X =キュー[++です]。
48              もし(可能!= 上)
 49              {
50                  int型、Y =キュー[++です]。
51                  キュー[トップ++] = X + Y。
52                  合計=合計+ X + Y。
53                  それほど(キューは、であり、トップ1 )。
54              }
 55          }
 56          のprintf(" %D%D%.1lf \ n "8 * LEN、和、8.0 * LEN / 合計)。
57      }
 58      リターン 0 59 }

 

おすすめ

転載: www.cnblogs.com/Angfe/p/11845555.html