|
CENTERです。
ある本に載っていたところでわからない部分があるので質問がありますので
わかる方がいたら教えていただけないでしょうか・・・
キューについての質問
キューのプログラムのcountというのは、なんのための変数ですか?
rbuf[(head + count) % MAX] = c;の部分で%となっているのは
なぜですか?
head = ++head % MAX;の部分の処理もわかりません。
ツリーについての質問
typdef struct node_t {
int val;
struct node_t *lson; /* left son */
struct node_t *rson: /* right son */
} NODE;
上記の構造体の各メンバーというのは、どういう役割ですか?
newとnodeというのは、それぞれ何をあらわしているのですか?
構造体自体は、同じですよね・・・
if (new->val == node->val)
return; /* 値が同じなので追加しない */
という条件がありますが、なぜですか?
new->val > node->valの条件とnew->val < node->valの
条件もわかりません。
node->rson = new; /* 右側に追加 */
node->lson = new; /* 左側に追加 */
上記のようにありますが、newというのは
変数の名前ですよね・・・
add_node(rson,new);
add_node(lson,new);
上記のように自分自身を呼び出しているのですが
こういうことは、あるのですか?
意味的には、どういう意味になりますか?
とにかくツリーについては、順序よく説明してくださるかたいませんか?
キュー
データを引数にしてbuf_in()関数を呼び出すことにより、データがキューに
格納される。また、buf_out()関数を呼び出すことにより、戻り値としてキュ
ーからデータを取り出すことができる。
tailはデータを入れるべき位置で、headは取り出すデータがある位置を示す。
int rbuf[MAX];
int head = 0;
int count = 0;
int buf_in(int c)
{
if (count == MAX) /* buffer full */
return (ERROR);
rbuf[(head + count) % MAX] = c;
++count;
return (c);
}
int buf_out(void)
{
int r;
if (count == 0) /* buffer empty */
return (ERROR);
r = rbuf[head];
head = ++head % MAX;
return (r);
}
ツリー
typdef struct node_t {
int val;
struct node_t *lson; /* left son */
struct node_t *rson: /* right son */
} NODE;
/*
* sorting された二分木にノードを追加
*/
void add_node(NODE *node, NODE *new)
{
if (new->val == node->val)
return; /* 値が同じなので追加しない */
else if (new->val > node->val) {
if (node->rson == NULL)
node->rson = new; /* 右側に追加 */
else
add_node(rson,new);
}
else if (new->val < node->val) {
if (node->lson == NULL)
node->lson = new; /* 左側に追加 */
else
add_node(lson,new);
}
}
ご指導よろしくお願いします。
|