◇
プログラミング例(一部であり連続していない)
struct node {
double data;
int next;
};
struct node[100]; /* 100 個分のデータ場所の確保 */
int root; /* 最初の要素を指す */
int new; /* 未使用の要素を指す */
int p, q;
double x;
root=-1; /* 「根元」 -1 は「何も指していない」
ことを表すものとする */
◇
new=0;
/* 根元にデータ x を挿入する */
p=new; new=new+1;
/* 実際にはnew が100 以上にならないようチェックが必要 */
node[p].data=x;
node[p].next=root;
root=p;
/* 根元のデータを削除する */
p=node[root].next;
root=p;
◇
/* 要素 q の次にデータ x を挿入する */
p=new; new=new+1;
/* 実際にはnew が100 以上にならないようチェックが必要 */
node[p].data=x;
node[p].next=node[q].next;
node[q].next=p;
/* 要素 q の次の要素を削除する */
p=node[q].next;
node[q].next=node[p].next;
/* 実際には次の要素があるかどうかチェックが必要 */
◇
/* リストのデータをたどって順に表示する */
p=root;
while( p != -1 ){
printf("%g\n", node[p].data );
p=node[p].next;
}
/* i 番目のデータを取り出す */
p=root;
j=0;
while( p!=-1 ){
if( j==i )break;
p=node[p].next;
j++;
}
if( p!=-1 ){ /* ここでi番目のデータがないとき p==-1 となる */
x=node[p].data;
}
◇
/*
これらの例では、一度削除した要素は、
二度と使われないので、実際のデータ数
が 100 より少なくても記憶場所がいずれ
なくなってしまう。
単純に new=new+1 ではなく使用・不使用
を調べて有効に使う方がよい。
→ガベージコレクション
Garbage Collection
=ゴミ集め
*/
戻る