2012-04-17 1 views
0

私がしようとしているのは、ハフマンアルゴリズムです。プログラムの仕様の1つは、ユーザーが対応する周波数の文字を含む.txtファイルを作成することです。だから、それは文字のリストのようなものになり、それぞれの文字の重みです。以下はthat.txtファイルの例となります:テキストファイルをリンクリストに実装する方法は?

H5
J4
K6
S9
L2
N1

私は何を管理していることは.TXTを読んで表示することですファイル。そして私はリンクされたリストにそれを実装するのに苦労しています。私はfread()fwrite()と他のすべての関数を読み込もうとしましたが、本当にその要点を得ることはできません。どんな種類の助けも非常に感謝しています。 :D

+1

申し訳ありませんがあるとしますが、ISNリンクされたリストではなく、ハフマンが_tree_をコーディングするために必要なものはありませんか? – jogojapan

+0

しかし、私はそれを木にする前に、文字を対応する頻度にポイントしなければなりません。リンクされたリストは、かなり良い方法です。 – nutellafella

+0

ほとんど何文字ありますか?これは拡大できますか?いいえあなたは26文字を持っていますし、頻繁にアクセスしなければならないので、構造体の配列が良い方法です。 – Friedrich

答えて

0

ツリーが必要になるだろう、私はあなたがあなたのファイルを読むことができた場合は、だから、

struct list { 
    char *symbol; 
    int prob; 
    struct list *next; 
}; 

のようなものを保存するためstructを使用していると仮定しているという事実にもかかわらず文字列 "H5"、 "J4"などを持っています。文字列をstrtokなどの文字列に分割するだけです。今度はシンボルを*symbolにコピーし、atoiの確率をintに変換してprobに書き込むことができます。

編集:があれば、おそらく、多分あなたはまったくstrtokを必要としない一方OND strtokでその良い解析可能ではありません、あなたのファイルの構造について考える必要があることを「H5」becaus、言及するのを忘れました最初の文字は常にシンボルであり、その後はカウントされます。

編集#2:また、fscanfを試してみてください(形式がわかっていればstrtokよりはるかに簡単です)。

+0

'int'の適合性について:読み込んだデータは確率ではなく生の文字カウントです。 'int'はそれのために大丈夫です、そして、もし私が間違っていなければ、それは実際の木のために必要なものです。 – jogojapan

+0

ヒントをありがとう、私は編集をしました。 –

0

ツリーは必要ありません。構造体の配列は必要なものだけです。 構造体のアイデアはgoogですが、long型の配列のどちらかを想像することができます。私たちは、配列を定義した場合か、提案されたように構造体の配列。

とにかく[0] =私たちは文字の出現箇所が非常に簡単に計算することができfrequencies_of_As。

char *asUpper = toupper(ch); 
frequency_Array [char - 'A'] += 1; 

と書き込みは、単純なループ

だろう
up_to = 'Z' - 'A'; 
for (i = 0, ch = 'A'; i < up_to; i++, ch++){ 
    fprintf(file, "%d%c", i, ch) 

または

ファイルを読むためにWANおよびこのファイルは、厳密な単純なループでも十分であるべきであるということである場合のように、私は私が誤解ならば、我々はちょうどアルファベットの26文字

long counter; char ch; 
    for i = 0; i < up_to; i++){ 
      int how_many = fscanf(file_to_use, "%c%d\n", &counter, &ch); 
      assert(ch >= 'A' && ch <= 'Z'); 
      frequenceArray[ch - 'A'] = counter; 
    } 
+1

これは、OPが話していた.txtファイルを作成する手順のようです。しかし、そのファイルを読んでその中の情報を使って何かをやっていることに疑問はありませんでしたか? – jogojapan

+0

ああ、私も読書を追加することがあります。 – Friedrich

関連する問題