C言語のきほん「リスト」

スポンサーリンク
Cプログラミング C言語

複数のデータを管理する方法の一つにリストがある。

データの追加や削除が効率よく行えるデータの管理方法で、様々な場面で使われている。

リストの要素はノードと呼ばれ、ノードには構造体が使用される。
構造体には格納するデータと共に次の要素へのポインタが含まれる。
このポインタを使って、次のノード、その次のノード、というように順番をたどることができる。

末尾のノードでは、このポインタの値をNULLとしておく。

リストの仕組み

この仕組みなら、ポインタが指す先を変更するだけで、リストの途中に別の要素を追加したり、途中の要素を削除したりできる。

それでは、複数の文字列を管理するプログラムの例をご紹介しよう。

なお、本プログラムは、Windows 11 Home(23H2)上で、 
 Visual Studio Code(1.92.1)を使用して作成し、gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0で  コンパイルしている。

//リスト

#include <stdio.h>

typedef struct Node
{
   char str[256];
   struct Node *next;
}Node;

Node *head = NULL;

void printout(void)
{
    Node *node = head;

    while (node != NULL)
    {
       printf("[%s]",node->str);
       node = node->next;
    }
    printf("\n");
    
}

int main(void) {
    Node n0 = {"This",NULL};
    Node n1 = {"is",NULL};
    Node n2 = {"a",NULL};
    Node n3 = {"pen",NULL};
    head = &n0;
    n0.next = &n1;
    n1.next = &n2;
    n2.next = &n3;

    printout();

    Node new_node = {"not",&n2};
    n1.next = &new_node;
    printout();
}

実行結果

[This][is][a][pen]
[This][is][not][a][pen]

ノードは、文字列と次のノードへのポインタを持つ。
始めに、”This”、”is”、”a”、”pen”という4つの文字列を1つずつのノードに格納し、それらを順番に参照できるように次のノードへのポインタの設定を行う。

次に、途中でノードを1つ追加する(”not”)処理を行っている。

参考)「C言語 新版 ゼロからはじめるプログラミング」 三谷 純 (著) 翔泳社

コメント

タイトルとURLをコピーしました