プログラミング例(一部であり連続していない)
struct node {
   double data;
   int next;
};
struct node node[100];  /* 100 個分のデータ場所の確保 */
int root;          /* 最初の要素を指す */
int new;           /* 未使用の要素を指す */
int p, q;
double x;

new=5;
p=0;
q=0;
x=0.0;

/* データの代入(本文中の図と同じデータ) */
root=2
node[0].data= 11.6; node[0].next= -1;
node[1].data= -0.1; node[1].next= 3;
node[2].data= -1.3; node[2].next= 1;
node[3].data= 4.5; node[3].next= 4;
node[4].data= 8.9; node[4].next= 0;


/* 根元にデータ x を挿入する */ p=new; new=new+1; /* p=5; new=6; */ /* 実際にはnew が100 以上にならないようチェックが必要 */ node[p].data=x; /* node[5].data=0.0; */ node[p].next=root; /* node[5].next=2; */ root=p; /* root=5; 5の箱には 5|0.0|2 が入った*/
/* 根元のデータを削除する */ p=node[root].next; /* p=node[5].next(すなわち2) */ root=p; /* root=2; 元へもどった */
/* 要素 q(たとえば3) の次にデータ x を挿入する */ p=new; /* 未使用の要素 new=6 を使う */ /* 実際にはnew が100 以上にならないようチェックが必要 */ node[p].data=x; /* 6の data箱に 0.0 を入れる */ node[p].next=node[q].next; /* 6の next箱に 4を入れる 6|0.0|4 */ node[q].next=p; /* 3の next 4 を 6に入れ換える 3|4.5|6 */
/* 要素 q(たとえば1) の次の要素(node[3])を削除する */ p=node[q].next; /* p=3; */ node[q].next=node[p].next; /* 1の next 3 を 4 に入れ換える 1|-0.1|4 */ /* 実際には次の要素があるかどうかチェックが必要 */
/* リストのデータをたどって順に表示する */ p=root; /* p=2; */ while( p != -1 ){ /* p が -1 でない間以下を繰り返す*/ printf("%g\n", node[p].data ); p=node[p].next; }
/* i 番目(たとえば3番目)のデータを取り出す(0番目から数えている) */ p=root; /* p=2; から始まる */ j=0; while( p!=-1 ){ /* p が -1 でない間以下を繰り返す */ if( j==i )break; /* j=i(たとえば3) になったら下の ifへ飛ぶ */ p=node[p].next; /* j=0 のとき p=node[2].next すなわち 1 */ j++; /* j=1 のとき p=node[1].next すなわち 6 */ } /* j=2 のとき p=node[6].next すなわち 4 */ if( p!=-1 ){ /* ここでi(3)番目のデータがないとき p==-1 となる */ x=node[p].data; /* x=node[4].data すなわち 8.9 */ }
/* これらの例では、一度削除した要素は、 二度と使われないので、実際のデータ数 が 100 より少なくても記憶場所がいずれ なくなってしまう。 単純に new=new+1 ではなく使用・不使用 を調べて有効に使う方がよい。 →ガベージコレクション Garbage Collection =ゴミ集め */
戻る