配列を使用して連結リストを実装する方法を知っています。たとえば、構造体を次のように定義します。
struct Node{
int data;
int link;
}
「data」は情報を格納し、「link」は次のノードの配列にインデックスを格納します。
「通常の」リンクリストと比較して、配列を使用してリンクリストを実装することの利点と欠点は何ですか? 任意の提案をいただければ幸いです。
配列を使用して連結リストを実装する方法を知っています。たとえば、構造体を次のように定義します。
struct Node{
int data;
int link;
}
「data」は情報を格納し、「link」は次のノードの配列にインデックスを格納します。
「通常の」リンクリストと比較して、配列を使用してリンクリストを実装することの利点と欠点は何ですか? 任意の提案をいただければ幸いです。
リンクリストを配列でバックアップすると、両方の欠点が発生します。したがって、これはおそらくそれを実装するためのあまり良い方法ではありません。
いくつかの直接的な欠点:
私はいくつかの利点があると思います:
mmap()
アレイをディスクにシリアル化し、呼び出しで簡単に読み戻すことができます。ただし、移植性のために何らかのプロトコルバッファを使用する方がよいでしょう。「通常の」リンクリストと比較して、配列を使用したリンクリストの実装の利点と欠点は何ですか?
リンクされたリストには、次の複雑さがあります。
表現が厳密で連続した配列を使用している場合、複雑さが異なります。
つまり、配列に関して実装されたリンク リスト API は、配列のように動作します。
リンクされたリストまたは厳密な配列のツリーを使用することで、これをいくらか軽減できます。これにより、ロープまたはフィンガー ツリーまたは遅延シーケンスが発生します。
スタックインは2つの方法で実装します。最初は配列を使用し、2番目はリンクリストを使用します。
配列を使用する際のいくつかの欠点は、ほとんどのプログラマーがスタック実装でリンクリストを使用することです。
1つ目は、リンクリストを使用したスタックです。最初はスタックサイズを宣言せず、スタック内のデータストアを制限しません。2つ目は、それを宣言して使用するためのポインターエッセイのリンクリストです。
リンクリストで使用されるポインタは1つだけです。その呼ばれるトップポインタ。
スタックはlifoメソッドを使用します。しかし、リンクリストプログラムの実装にはいくつかの欠点があります。
ほとんどのプログラマーは、いいねリストを使用してスタック実装を使用します。
Array 実装を使用すると、リストのノードにシーケンシャルかつ高速にアクセスできますが、ポインターを使用して Linked list を実装すると、ノードにランダム アクセスできます。配列の実装は、固定番号を扱う場合に役立ちます。リストの途中からノードを挿入/削除する必要がある場合は、後ですべてのノードをシフトする必要があるため、パフォーマンスに関する限り、配列のサイズ変更はコストがかかるためです。これとは逆に、わからない場合はポインター実装を使用する必要があります。このようなリストは効率的に拡大/縮小でき、ノードをシフトする必要がないため、必要なノードの数を減らすことができます。ポインターを逆参照して参照するだけで実行できます。