0Pricing
C Academy · レッスン

連結リスト

連結リストの仕組みと、挿入・削除などの操作の実装方法を学びます

「連結リスト」はCoddyKit上の無料C Academyレッスンです。 これはレッスン1/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C Academyコースには全3レッスンが含まれています。

Cの連結リスト

Cの連結リスト

連結リストは、要素(ノード)をポインターでつないだ動的なデータ構造です。

このレッスンでは、次のことを学びます。

  • 連結リストの仕組み。
  • 連結リストへのノードの挿入と削除。
  • 配列に対する連結リストの利点。
連結リスト — イラスト1

例:連結リストのノードの定義

例:連結リストのノードの定義

Cでは、データフィールドと次のノードへのポインターを持つstructを使用して、連結リストのノードを定義します。

#include <stdio.h>
#include <stdlib.h>

struct Node {
    int data;
    struct Node *next;
};

int main() {
    struct Node *head = NULL;
    return 0;
}

先頭へのノードの挿入

先頭へのノードの挿入

連結リストの先頭に新しいノードを挿入するには、次の手順を実行します。

  • 新しいノードを作成します。
  • そのnextポインターを現在の先頭に設定します。
  • 先頭ポインターを更新します。

例:先頭へのノードの挿入

例:先頭へのノードの挿入

このプログラムでは、連結リストの先頭に新しいノードを挿入します。

#include <stdio.h>
#include <stdlib.h>

struct Node {
    int data;
    struct Node *next;
};

void insertAtBeginning(struct Node **head, int newData) {
    struct Node *newNode = (struct Node*)malloc(sizeof(struct Node));
    newNode->data = newData;
    newNode->next = *head;
    *head = newNode;
}

int main() {
    struct Node *head = NULL;
    insertAtBeginning(&head, 10);
    printf("Inserted: %d\n", head->data);
    return 0;
}

ノードの削除

ノードの削除

連結リストからノードを削除するには、次の手順を実行します。

  • 削除するノードを見つけます。
  • 前のノードのnextポインターを更新します。
  • 削除したノードのメモリを解放します。

例:ノードの削除

例:ノードの削除

このプログラムでは、連結リストからノードを削除します。

#include <stdio.h>
#include <stdlib.h>

struct Node {
    int data;
    struct Node *next;
};

void deleteNode(struct Node **head, int key) {
    struct Node *temp = *head, *prev;
    if (temp != NULL && temp->data == key) {
        *head = temp->next;
        free(temp);
        return;
    }
    while (temp != NULL && temp->data != key) {
        prev = temp;
        temp = temp->next;
    }
    if (temp == NULL) return;
    prev->next = temp->next;
    free(temp);
}

int main() {
    struct Node *head = (struct Node*)malloc(sizeof(struct Node));
    head->data = 10;
    head->next = NULL;
    deleteNode(&head, 10);
    return 0;
}

連結リストの利点

連結リストの利点

連結リストには、配列に対して次のような利点があります。

  • サイズが動的です(あらかじめサイズを指定する必要がありません)。
  • 要素の挿入と削除を効率的に行えます。
  • 固定サイズによるメモリの無駄がありません。

まとめ

まとめ

このレッスンでは、次のことを学びました。

  • 連結リストとは何か、またどのように動作するか。
  • ノードを挿入および削除する方法。
  • 配列に対する連結リストの利点。

次は、Cのスタックとキューについて見ていきます。

連結リスト — イラスト9

よくある質問

「連結リスト」レッスンは無料ですか?

はい。「連結リスト」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C Academyコースには全3レッスンが含まれています。

「連結リスト」で何を学びますか?

連結リストの仕組みと、挿入・削除などの操作の実装方法を学びます ブラウザで直接実行するハンズオンコードでC Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

C Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのC Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/3です。

「連結リスト」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このC Academyレッスンでコードを書いて実行できますか?

はい。すべてのC Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 連結リスト
  2. スタックとキュー
  3. 木構造とグラフ
← C Academyに戻る