配列とリンク リスト: パフォーマンスの違いとメモリ アクセスのアプリケーション シナリオ


リンク リストには O(1) の挿入操作と削除操作がありますが、場合によってはこれが重要ではありません。ノードを挿入および削除する前に、まず挿入または削除する場所を見つける必要があります。線形検索アルゴリズムを使用する場合、リンク リストの検索速度は配列の検索速度よりも大幅に遅くなります。理論的には、リンク リストと配列の両方の検索時間の複雑さは O(n) ですが、実際のシナリオでは、リンク リストの効率は配列の効率よりもはるかに低くなります。

これは、リンクされたリストがキャッシュに適していないためです。配列にアクセスするとき、局所性の原理により、システムは後続の連続メモリをキャッシュに事前に読み取るため、配列要素への後続のアクセスは L1 キャッシュ内で完了できます。ただし、リンク リストにはこの機能がなく、ノードへのアクセスにはキャッシュ内のアクセスではなくメモリ アクセスが必要です。

ただし、配列には動的に拡張できないことや、1 回の拡張で多数の要素を移動する必要があるなどの欠点もあります。したがって、配列またはリンク リストの使用を選択する場合は、特定のシナリオに従って選択する必要があります。


dff9f09b1f380d0d0a54efd1735fc05b.jpeg

たまたまここに C 言語パッケージがあるので、プライベート メッセージを送って入手してください

おすすめ

転載: blog.csdn.net/m0_67034740/article/details/129747397