配列データ構造の基本操作を徹底解説|走査・挿入・削除・検索・更新
配列は最も基本的なデータ構造の一つであり、プログラミングの基礎となる重要な概念です。本記事では、配列データ構造に対して行われる代表的な基本操作について、C++のコード例とともにわかりやすく解説します。
配列に対する5つの基本操作
配列データ構造に対する主な操作には、以下の5つがあります。
- 走査(Traverse):配列内のすべての要素を順番に参照すること
- 挿入(Insertion):指定した位置に新しい要素を追加すること
- 削除(Deletion):配列から要素を取り除き、残りの要素の位置を調整すること
- 検索(Search):配列の中から目的の要素を見つけ出すこと
- 更新(Update):指定した位置にある要素の値を書き換えること
各操作の詳細
走査(Traverse)
走査とは、配列の先頭から末尾まで、すべての要素に順番にアクセスして確認する操作です。要素の表示や集計など、さまざまな処理の基礎となります。
挿入(Insertion)
挿入は、配列内の指定された位置に新しい要素を追加する操作です。動的配列(C++では std::vector など)を使えば、末尾への追加が簡単に行えます。
削除(Deletion)
削除は、配列から特定の要素を取り除く操作です。要素を削除した後は、後続の要素が前方に詰められるため、それぞれの位置(インデックス)も自動的に調整されます。
検索(Search)
検索は、配列内に存在する特定の要素を見つけ出す操作です。線形探索や二分探索などのアルゴリズムが用いられます。
更新(Update)
更新は、指定した位置にある要素の値を新しい値に書き換える操作です。インデックスを指定して直接代入できるため、非常に高速に処理できます。
C++による実装例
それでは、これらの操作を実際にC++で実装した例を見てみましょう。
#include<iostream>
#include<vector>
using namespace std;
main(){
vector<int> arr;
// 要素の挿入
arr.push_back(10);
arr.push_back(20);
arr.push_back(30);
arr.push_back(40);
arr.push_back(50);
arr.push_back(60);
for(int i = 0; i<arr.size(); i++){ // 走査
cout << arr[i] << " ";
}
cout << endl;
// 要素の削除
arr.erase(arr.begin() + 2);
arr.erase(arr.begin() + 3);
for(int i = 0; i<arr.size(); i++){ // 走査
cout << arr[i] << " ";
}
cout << endl;
arr[0] = 100; // 更新
for(int i = 0; i<arr.size(); i++){ // 走査
cout << arr[i] << " ";
}
cout << endl;
}実行結果
10 20 30 40 50 60 10 20 40 60 100 20 40 60
コードの解説
このコードでは、まず push_back() を使って6つの整数(10〜60)を配列に挿入し、最初の走査ですべての要素を表示しています。
次に、erase() を使ってインデックス2の「30」と、その後のインデックス3の「50」を削除します。削除後の配列は「10 20 40 60」となり、残りの要素の位置が自動的に調整されていることがわかります。
最後に、arr[0] = 100; によって先頭の要素を「10」から「100」へ更新し、再度走査して結果を確認しています。
まとめ
配列に対する基本操作である「走査」「挿入」「削除」「検索」「更新」は、あらゆるアルゴリズムやデータ処理の土台となるものです。特に std::vector のような動的配列を活用することで、柔軟かつ効率的なデータ管理が可能になります。ぜひ実際にコードを書いて、各操作の動きを体感してみてください。
-
データ構造における二分木の表現方法|配列と連結リストの違いを解説
コンピュータメモリ上での二分木の表現方法 ここでは、二分木をコンピュータのメモリ上でどのように表現するかについて解説します。表現方法には主に2種類あり、配列を使う方法と連結リスト(リンクリスト)を使う方法があります。 配列による表現 まず、次のような二分木を例に考えてみましょう。 配列による表現では、木の要素をレベル順(幅優先順)に走査しながら格納していきます。つまり、ノードを上のレベルから順番に保存する方式です。存在しない要素がある場合は、その位置を空白のまま残します。上記の木を配列で表現すると、次のようになります。 123456789101112131415 10516-81520
-
データ構造の償却時間計算量とは?償却解析の基礎と計算方法を解説
償却解析(Amortized Analysis)とは償却解析は、ごく一部の操作が非常に遅い一方で、頻繁に実行される大半の操作は高速であるような状況で用いられる分析手法です。データ構造の分野では、ハッシュテーブルや素集合データ構造(Disjoint Set/Union-Find)などの性能評価において重要な役割を果たします。例えばハッシュテーブルでは、探索の時間計算量はほとんどの場合 O(1) ですが、ときに O(n) の操作が発生することがあります。要素の検索や挿入は通常、定数時間で完了する処理です。しかし衝突(コリジョン)が発生した場合には、その解決のために O(n) の操作が必要になること