MENU

【C言語】線形探索とは?仕組みやプログラムの実装方法を解説

この記事では、線形探索というアルゴリズムについて解説します。

目次から探す

線形探索の仕組み

線形探索は、リストや配列などのデータ構造から特定の要素を探すためのアルゴリズムです。

線形探索は、先頭から順番に要素を比較し、目的の要素が見つかるまで続けます。

以下に線形探索のアルゴリズムの説明と疑似コードの例を示します。

アルゴリズムの説明

  1. リストや配列の先頭から順番に要素を取り出す。
  2. 取り出した要素と目的の要素を比較する。
  3. もし一致すれば、目的の要素が見つかったとして処理を終了する。
  4. もし一致しなければ、次の要素を取り出して比較を繰り返す。
  5. リストや配列の最後まで比較しても目的の要素が見つからなければ、目的の要素は存在しないとして処理を終了する。

疑似コードの例

function linearSearch(array, target):
    for i from 0 to length(array) - 1:
        if array[i] equals target:
            return i
    return -1

線形探索のプログラムの実装方法

線形探索は、配列やリストを使って実装することができます。

以下では、配列を使った実装方法とリストを使った実装方法、そして具体的なプログラムの例を紹介します。

配列を使った実装方法

配列を使った線形探索では、配列の要素を順番に比較して目的の要素を探します。

以下に配列を使った線形探索のプログラムの例を示します。

#include <stdio.h>
int linearSearch(int array[], int size, int target) {
    for (int i = 0; i < size; i++) {
        if (array[i] == target) {
            return i;
        }
    }
    return -1;
}
int main() {
    int array[] = {5, 2, 8, 10, 3};
    int size = sizeof(array) / sizeof(array[0]);
    int target = 8;
    int result = linearSearch(array, size, target);
    if (result == -1) {
        printf("要素が見つかりませんでした。\n");
    } else {
        printf("要素が見つかりました。インデックス: %d\n", result);
    }
    return 0;
}

リストを使った実装方法

リストを使った線形探索では、リストの要素を順番に比較して目的の要素を探します。

以下にリストを使った線形探索のプログラムの例を示します。

#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
    int data;
    struct Node* next;
} Node;
int linearSearch(Node* head, int target) {
    Node* current = head;
    int index = 0;
    while (current != NULL) {
        if (current->data == target) {
            return index;
        }
        current = current->next;
        index++;
    }
    return -1;
}
void insert(Node** head, int data) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = data;
    newNode->next = NULL;
    if (*head == NULL) {
        *head = newNode;
    } else {
        Node* current = *head;
        while (current->next != NULL) {
            current = current->next;
        }
        current->next = newNode;
    }
}
void printList(Node* head) {
    Node* current = head;
    while (current != NULL) {
        printf("%d ", current->data);
        current = current->next;
    }
    printf("\n");
}
int main() {
    Node* head = NULL;
    insert(&head, 5);
    insert(&head, 2);
    insert(&head, 8);
    insert(&head, 10);
    insert(&head, 3);
    printList(head);
    int target = 8;
    int result = linearSearch(head, target);
    if (result == -1) {
        printf("要素が見つかりませんでした。\n");
    } else {
        printf("要素が見つかりました。インデックス: %d\n", result);
    }
    return 0;
}

線形探索の応用例

線形探索は、データベースの検索やファイルの検索など、さまざまな応用例があります。

以下にデータベースの検索とファイルの検索の例を紹介します。

データベースの検索

データベースでは、線形探索を使って特定のデータを検索することがあります。

たとえば、顧客データベースから特定の顧客の情報を検索する場合、線形探索を使って顧客IDや顧客名などの情報を比較し、目的の顧客を見つけることができます。

ファイルの検索

ファイルシステムでは、線形探索を使って特定のファイルを検索することがあります。

たとえば、特定のディレクトリ内のファイルを順番に比較し、目的のファイルを見つけることができます。

これは、ファイルの名前や拡張子などの情報を比較することで行われます。

以上が、「【C言語】線形探索とは?仕組みやプログラムの実装方法を解説」の記事の構成となります。

目次から探す