next up previous contents
Next: 2. リストの削除 Up: 1. リストの初歩 Previous: 1. リストの初歩

1. リストの追加


    struct LIST * newList( struct LIST * start){
        struct LIST *p=start;
        struct LIST *new;
        while(p->next!=NULL){
           p=p->next;
        }
        new = (struct LIST *) malloc(sizeof(struct LIST));
        p->next = new;
        new->next = NULL;
        return new;
    }

リストでは後戻りは出来ないので、先頭のオブジェクトへのポインタは 必ず覚えていなければならない。上の関数 newList() はそうした リストの先頭オブジェクトへのアドレスを引数に取る。関数内部では、 先頭から順に次のオブジェクトへのアドレスを取り出し、最後のオブジェクト になるまで移動する。次に、新しいオブジェクトを malloc() で割り当て、 それへのアドレスを最後のオブジェクトの next に入れることで、新しく 割り当てたオブジェクトをリストにつけ足している。最後に、新しく つけ足した LIST オブジェクトの next に NULL を代入し、これがリスト中 の最後のオブジェクトになるようにすることを忘れてはいけない(図 [*])。

\begin{figure}
\begin{center}\epsfile {file=list2}\end{center}\end{figure}

この例では、データ本体に対しては何もしていないが、それは別の問題で ある。



Noriyo Kanayama 平成14年11月26日