データ構造とアルゴリズムの詳細な説明配列とリンクリスト

アレイの基本的な特性

配列は一般的に使用されるデータ構造です。データを保存するために、メモリ内に一連のメモリ空間を作成しました。彼のデータへのアクセスは、添え字を介して直接行うことができます。

ただし、配列の各要素のメモリアドレスは明確であるため、配列の要素を追加または削除すると、通常、後続の要素の全体的な前方または後方への移動が伴います。たとえば、配列の0番目のビットを配列から削除するには、後続の各ビットを1ビット前に移動します。

さらに、アレイの作成時にアレイのサイズが決定されました。容量を拡張する場合は、新しい容量の連続したメモリアドレスをメモリ内で見つけ、元のデータを新しいメモリにコピーする必要があります。コスト。

リンクされたリストは、これらの欠点を解決するために使用されるデータ構造です。

リンクリストの基本的な特性

リンクされたリストの要素はメモリ空間で離散的であり、それらの要素の順序は、前のノードを介して次のノードを指すアドレスを保存することであり、動的コレクションを形成します。

Java言語に基づく簡単なリンクリストの実装を見てみましょう。

public class SimpleNode<T> {
    public T value;
    public SimpleNode<T> next;
}

びっくりした?実際、これはリンクリストの最も単純な実装です。オブジェクトを追加した場合

public SimpleNode<T> prep;

フィールド、これは二重にリンクされたリストになります。

リンクリストの利点は、データを追加および削除するときに、追加ポイントでノードの準備と次の属性のみを変更でき、あまり多くのノードを変更せずに目的を達成できることです。

配列とリンクリストの比較

配列 リンクされたリスト
メモリ使用量 比較的小さい 追加のメモリオーバーヘッドがある比較的大きい
指定された添え字要素にアクセスする o(1)時間の複雑さに直接アクセス 最初のノードから逆方向に検索する場合、時間の複雑さはo(n)です。
指定した添え字に要素を追加します o(n)時間の複雑さ、配列の最初の位置に追加するのに長い時間がかかる o(n)時間の複雑さ。配列の中央に追加すると、後続の操作を行う前にノードを見つける必要があります。
指定した添え字の要素を削除します 基本的に上記と同じ 基本的に上記と同じ
19件の元の記事を公開しました 賞賛されました8 訪問4041

おすすめ

転載: blog.csdn.net/u014068277/article/details/103229643
おすすめ