※教科書第9章「線形リストの実現(カーソル版)」
配列の番号をそのまま格納の順番とするのではなく、データのある位置(場所、アドレス)ととらえて、線形リストに応用する方法があります。
実現方法
次の位置(配列番号)を格納する構造体を用意すれば、線形リストを実現できます。
1.以下に示すような構造体を定義します。
typedef struct _team{char *name; //球団名 int next; //次の球団の位置(配列の添え字)}Team;次のデータを表すnextは int型ですが、なぜなら 配列の添字番号は、0.1.2.3.4....というようにint型の数値であるからということが理解できると思います。
なお、上記の例では、typdef (typedef A B でAをBと定義するという意味になる)を利用してます。
2.この構造体の配列を宣言し初期化する。
この構造体を配列で宣言して,次のデータのある配列番号を nextに格納します.その際、以下のルールに従います。
たとえば、次のように初期化してデータを格納できます。
Team teams[ ]={"",1,"Fighters",3,"Marines",4, "Buffaloes",2,"Hawks",6,"Blue Wave",-1,"Lions",5};問題1
(1)この構造体配列のイメージを書け
(2)この例はどのような順序になっているか?ただし、0番目データが先頭であるとする。末 尾の球団においては,その次のIDは-1とする.
(3)先頭から順番に出力するプログラムを下記にしたがい完成させよ(3位まででよい)
void kadai4_1(){struct Team teams[ ]={"",1,"Fighters",3,"Marines",4, "Buffaloes",2,"Hawks",6,"Blue Wave",-1,"Lions",5};int t1; //1位のチームの位置(配列番号)を表すint t2; //2位のチームの位置(配列番号)を表すint t3; //3位のチームの位置(配列番号)を表す //1位の球団の位置を求めるt1 = teams[(3-1)].next;printf("1位のチーム:%s\n",teams[t1].name);//2位の球団の位置を求めるt2 = teams[(3-2)].next;printf("2位のチーム:%s\n",teams[t2].name);//3位の球団の位置を求めるt3 = teams[(3-3)].next;printf("3位のチーム:%s\n",teams[t3].name);}(4) whileを用いて先頭から順番に出力するプログラムを完成させよ。