Я читаю о развернутых связанных списках и нашел два разных способа их создания. Книга у меня есть реализует один, как это:Массированные массивы связанных списков против узлов
// 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 или где-либо еще). В основном я хотел бы знать, какой из двух способов будет более вероятен для использования в реальных приложениях. Кроме того, это структура данных, которую я не должен тратить слишком много времени на изучение? Потому что в моей другой книге алгоритмов (CLRS) я даже не упоминал об этом.
Кажется, что одна из тех идей, которые хорошо смотрятся в теории, но на самом деле является болью в -.... Тот факт, что вы не могли найти каких-либо реализаций, является хорошим показателем того, что развернутые списки не имеют практической ценности. – user3386109
Под «развернутыми связанными списками», вы имеете в виду «навязчивые связанные списки»? Потому что если так, то такие списки, безусловно, * DO * имеют практическое значение. –
Я не слышал о «инкрустированном связанном списке», моя книга называет его «разворачиваемым связанным списком». не знаю, если они то же самое. В моей книге это похоже на связанный список больших блоков с меньшими узлами внутри каждого. Я предполагаю, что если это не то, что я в конечном итоге использую в будущем, я просто сниму его и перейду дальше, вместо того, чтобы провести остаток дня, пытаясь его реализовать. – Austin