複数のデータを管理する方法の一つにリストがある。
データの追加や削除が効率よく行えるデータの管理方法で、様々な場面で使われている。
リストの要素はノードと呼ばれ、ノードには構造体が使用される。
構造体には格納するデータと共に次の要素へのポインタが含まれる。
このポインタを使って、次のノード、その次のノード、というように順番をたどることができる。
末尾のノードでは、このポインタの値を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言語 新版 ゼロからはじめるプログラミング」 三谷 純 (著) 翔泳社
コメント