展開された連結リストについて読んでいて、1 つを作成する 2 つの異なる方法を見つけました。私が持っている本は次のようなものを実装しています:
// Node
typedef struct node {
int data;
struct node *next;
} Node;
// Block of nodes
typedef struct linkedblock {
struct linkedblock *next;
Node *head;
int nodeCount;
} LinkedBlock;
ただし、ウィキペディアは、LinkedBlock
へのポインターではなくNode
、配列を持っていることを示しています。これは、メモリが連続し、キャッシュの効率が向上するためではないでしょうか? このようにすることの他の利点はありますか?私の本がそれを実装する方法は、最適化されていない/悪いですか? 一般的な方法や優先される方法はありますか?
展開されたリンクリストを実装して、それらがどのように機能するかを学習できるようにしようとしていますが、将来使用する必要がある場合にも備えています (奇妙なことに、GitHub または他の場所で C 実装が見つかりません)。基本的に、2 つの方法のうち、実際のアプリケーションで使用される可能性が高い方法を知りたいと思います。また、これは学習に多くの時間を無駄にすべきではないデータ構造ですか? 私の他のアルゴリズムの本(CLRS)では、それについて言及されていないからです。