Data-structures-algorithms-array-data-structure

提供:Dev Guides
移動先:案内検索

データ構造とアルゴリズム-配列

配列は、一定数のアイテムを保持できるコンテナであり、これらのアイテムは同じタイプである必要があります。 ほとんどのデータ構造は、配列を使用してアルゴリズムを実装します。 以下は、配列の概念を理解するための重要な用語です。

  • 要素-配列に格納されている各項目は要素と呼ばれます。
  • インデックス-配列内の要素の各位置には、要素を識別するために使用される数値インデックスがあります。

配列表現

配列は、さまざまな言語でさまざまな方法で宣言できます。 例として、C配列の宣言を見てみましょう。

配列宣言

配列は、さまざまな言語でさまざまな方法で宣言できます。 例として、C配列の宣言を見てみましょう。

配列表現

上記の図に従って、考慮すべき重要な点を次に示します。

  • インデックスは0で始まります。
  • 配列の長さは10です。つまり、10個の要素を格納できます。
  • 各要素には、そのインデックスを介してアクセスできます。 たとえば、インデックス6の要素を9としてフェッチできます。

基本操作

以下は、配列によってサポートされる基本的な操作です。

  • Traverse -すべての配列要素を1つずつ印刷します。
  • 挿入-指定されたインデックスに要素を追加します。
  • 削除-指定されたインデックスの要素を削除します。
  • 検索-指定されたインデックスを使用して、または値で要素を検索します。
  • Update -指定されたインデックスの要素を更新します。

Cでは、配列がサイズで初期化されると、次の順序で要素にデフォルト値が割り当てられます。

Data Type Default Value
bool false
char 0
int 0
float 0.0
double 0.0f
void
wchar_t 0

トラバース操作

この操作は、配列の要素をトラバースすることです。

次のプログラムは、配列の要素を走査して出力します。

#include <stdio.h>
main() {
   int LA[] = {1,3,5,7,8};
   int item = 10, k = 3, n = 5;
   int i = 0, j = n;
   printf("The original array elements are :\n");
   for(i = 0; i<n; i++) {
      printf("LA[%d] = %d \n", i, LA[i]);
   }
}

上記のプログラムをコンパイルして実行すると、次の結果が生成されます-

出力

The original array elements are :
LA[0] = 1
LA[1] = 3
LA[2] = 5
LA[3] = 7
LA[4] = 8

挿入操作

挿入操作は、1つ以上のデータ要素を配列に挿入することです。 要件に基づいて、配列の先頭、末尾、または任意のインデックスに新しい要素を追加できます。

ここでは、配列の最後にデータを追加する挿入操作の実用的な実装を確認します-

以下は、上記のアルゴリズムの実装です-

#include <stdio.h>

main() {
   int LA[] = {1,3,5,7,8};
   int item = 10, k = 3, n = 5;
   int i = 0, j = n;

   printf("The original array elements are :\n");

   for(i = 0; i<n; i++) {
      printf("LA[%d] = %d \n", i, LA[i]);
   }

   n = n &plus; 1;

   while( j >= k) {
      LA[j&plus;1] = LA[j];
      j = j - 1;
   }

   LA[k] = item;

   printf("The array elements after insertion :\n");

   for(i = 0; i<n; i++) {
      printf("LA[%d] = %d \n", i, LA[i]);
   }
}

上記のプログラムをコンパイルして実行すると、次の結果が生成されます-

出力

The original array elements are :
LA[0] = 1
LA[1] = 3
LA[2] = 5
LA[3] = 7
LA[4] = 8
The array elements after insertion :
LA[0] = 1
LA[1] = 3
LA[2] = 5
LA[3] = 10
LA[4] = 7
LA[5] = 8

配列挿入操作のその他のバリエーションリンク:/data_structures_algorithms/array_insertion_algorithm [ここをクリック]

削除操作

削除とは、配列から既存の要素を削除し、配列のすべての要素を再編成することです。

アルゴリズム

*LA* は *N* 要素の線形配列であり、 *K* は *K <= N* のような正の整数であると考えてください。 LAのK ^ th ^位置で使用可能な要素を削除するアルゴリズムは次のとおりです。
1. Start
2. Set J = K
3. Repeat steps 4 and 5 while J < N
4. Set LA[J] = LA[J + 1]
5. Set J = J&plus;1
6. Set N = N-1
7. Stop

以下は、上記のアルゴリズムの実装です-

#include <stdio.h>

void main() {
   int LA[] = {1,3,5,7,8};
   int k = 3, n = 5;
   int i, j;

   printf("The original array elements are :\n");

   for(i = 0; i<n; i++) {
      printf("LA[%d] = %d \n", i, LA[i]);
   }

   j = k;

   while( j < n) {
      LA[j-1] = LA[j];
      j = j &plus; 1;
   }

   n = n -1;

   printf("The array elements after deletion :\n");

   for(i = 0; i<n; i&plus;&plus;) {
      printf("LA[%d] = %d \n", i, LA[i]);
   }
}

上記のプログラムをコンパイルして実行すると、次の結果が生成されます-

出力

The original array elements are :
LA[0] = 1
LA[1] = 3
LA[2] = 5
LA[3] = 7
LA[4] = 8
The array elements after deletion :
LA[0] = 1
LA[1] = 3
LA[2] = 7
LA[3] = 8

検索操作

値またはインデックスに基づいて配列要素の検索を実行できます。

アルゴリズム

*LA* は *N* 要素の線形配列であり、 *K* は *K <= N* のような正の整数であると考えてください。 以下は、順次検索を使用してITEMの値を持つ要素を見つけるアルゴリズムです。
1. Start
2. Set J = 0
3. Repeat steps 4 and 5 while J < N
4. IF LA[J] is equal ITEM THEN GOTO STEP 6
5. Set J = J +1
6. PRINT J, ITEM
7. Stop

以下は、上記のアルゴリズムの実装です-

#include <stdio.h>

void main() {
   int LA[] = {1,3,5,7,8};
   int item = 5, n = 5;
   int i = 0, j = 0;

   printf("The original array elements are :\n");

   for(i = 0; i<n; i++) {
      printf("LA[%d] = %d \n", i, LA[i]);
   }

   while( j < n){
      if( LA[j] == item ) {
         break;
      }

      j = j + 1;
   }

   printf("Found element %d at position %d\n", item, j+1);
}

上記のプログラムをコンパイルして実行すると、次の結果が生成されます-

出力

The original array elements are :
LA[0] = 1
LA[1] = 3
LA[2] = 5
LA[3] = 7
LA[4] = 8
Found element 5 at position 3

更新操作

更新操作とは、特定のインデックスで配列から既存の要素を更新することです。

アルゴリズム

*LA* は *N* 要素の線形配列であり、 *K* は *K <= N* のような正の整数であると考えてください。 以下は、LAのK ^ th ^位置で利用可能な要素を更新するアルゴリズムです。
1. Start
2. Set LA[K-1] = ITEM
3. Stop

以下は、上記のアルゴリズムの実装です-

#include <stdio.h>

void main() {
   int LA[] = {1,3,5,7,8};
   int k = 3, n = 5, item = 10;
   int i, j;

   printf("The original array elements are :\n");

   for(i = 0; i<n; i++) {
      printf("LA[%d] = %d \n", i, LA[i]);
   }

   LA[k-1] = item;

   printf("The array elements after updation :\n");

   for(i = 0; i<n; i++) {
      printf("LA[%d] = %d \n", i, LA[i]);
   }
}

上記のプログラムをコンパイルして実行すると、次の結果が生成されます-

出力

The original array elements are :
LA[0] = 1
LA[1] = 3
LA[2] = 5
LA[3] = 7
LA[4] = 8
The array elements after updation :
LA[0] = 1
LA[1] = 3
LA[2] = 10
LA[3] = 7
LA[4] = 8