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

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

  • Element −配列に格納されている各アイテムは要素と呼ばれます。

  • Index −配列内の要素の各位置には、要素を識別するために使用される数値インデックスがあります。

配列表現

配列は、さまざまな言語でさまざまな方法で宣言できます。説明のために、C配列宣言を見てみましょう。

配列は、さまざまな言語でさまざまな方法で宣言できます。説明のために、C配列宣言を見てみましょう。

上図のように、考慮すべき重要な点は次のとおりです。

  • インデックスは0から始まります。

  • 配列の長さは10です。これは、10個の要素を格納できることを意味します。

  • 各要素には、そのインデックスを介してアクセスできます。たとえば、インデックス6の要素を9としてフェッチできます。

基本操作

アレイでサポートされる基本的な操作は次のとおりです。

  • Traverse −すべての配列要素を1つずつ出力します。

  • Insertion −指定されたインデックスに要素を追加します。

  • Deletion −指定されたインデックスの要素を削除します。

  • Search −指定されたインデックスまたは値を使用して要素を検索します。

  • Update −指定されたインデックスの要素を更新します。

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

データ・タイプ デフォルト値
ブール false
char 0
int 0
浮く 0.0
ダブル 0.0f
ボイド
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 + 1;
	
   while( j >= k) {
      LA[j+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

配列挿入操作の他のバリエーションについては、ここをクリックしてください

削除操作

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

アルゴリズム

検討する LA は線形配列です N 要素と K は次のような正の整数です K<=N。以下は、LAのK番目の位置で使用可能な要素を削除するアルゴリズムです。

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+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 + 1;
   }
	
   n = n -1;
   
   printf("The array elements after deletion :\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 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番目の位置で使用可能な要素を更新するためのアルゴリズムです。

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