質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

0回答

685閲覧

二分木を使った語頭符号の木

mamimumemo700

総合スコア12

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2018/12/09 08:40

大学の課題で語頭符号の木を生成するプログラムを完成せよというものが出ました。
穴埋めなのですが???の部分がよくわかりません。木は左側を長くするものです。
手描きで木をかけなどと言われればできるのですが、プログラミングに慣れておらず
この部分にとても困っています。特にvisitの使い方、i番目の符号語の割り当てにおいて…の部分(これは国語力の問題?)がよくわかっていません。

コードでなく考え方のヒントをくださればと思っております。

C

1 2typedef struct node_t { 3 struct node_t *up, *left, *right; //親と左右の子 4 int visit; //訪問済みかどうかのフラグ 5 int symbol; //記号の番号 6 int leaf; //葉かどうかのフラグ 7} *node; //node_tのポインタをnodeと名付ける 8 9struct node_t pool[MAX_NODES] = {{0}}; 10int n_nodes = 1; 11char *code[CODE_SIZE] = {0}; 12char buf[BUFFER_SIZE]; 13 14void make_tree(int asize, int *l)//i番目の符号長はl[i]、番号の小さいものほど符号長も短いとする 15{ 16 node t; //符号の木 17 for(int i = 0; i < asize; i++) { 18 t = pool; 19 for(int j = 0; j < l[i]; j++) { 20 21 if(t->left == 0) { 22 t->left = pool + n_nodes++; 23 t->left->up = t; 24 t->right = pool + n_nodes++; 25 t->right->up = t; 26 } 27 28 //i番目の符号語の割当において左の子を訪問していない場合 29 if(t->left->visit != asize + i) { 30 //??? 31 } 32 //i番目の符号語の割当において右の子を訪問していない場合 33 else if(t->right->visit != asize + i) { 34 //??? 35 } 36 //左右の子に訪問していた場合 37 else { 38 //??? 39 } 40 } 41 } 42}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

izmktr

2018/12/10 01:26

「左の子を訪問してない場合、~という処理をしたいです」ぐらいまで具体的な内容を書いたほうがいいように思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問