Я придумал структуру данных, которая сочетает в себе некоторые преимущества связанных списков с некоторыми преимуществами массивов фиксированного размера. Это кажется мне очень очевидным, и поэтому я ожидаю, что кто-то подумал об этом и уже назвал его. Кто-нибудь знает, как это называется:
Возьмите небольшой массив фиксированного размера. Если количество элементов, которые вы хотите поместить в свой массив, больше, чем размер массива, добавьте новый массив и любые другие указатели между старым и новым.
Таким образом, у вас есть:
Static array
—————————————————————————
|1|2|3|4|5|6|7|8|9|a|b|c|
—————————————————————————
Linked list
———— ———— ———— ———— ————
|1|*->|2|*->|3|*->|4|*->|5|*->NULL
———— ———— ———— ———— ————
My thing:
———————————— ————————————
|1|2|3|4|5|*->|6|7|8|9|a|*->NULL
———————————— ————————————
Редактировать : Для справки, этот алгоритм обеспечивает довольно низкую производительность добавления / удаления в худшем случае и ненамного лучше среднего случая. Большим преимуществом для моего сценария является улучшенная производительность кэша для операций чтения.
Edit re bounty : Ответ Antal S-Z был настолько полным и хорошо изученным, что я хотел предоставить им вознаграждение за это. Очевидно, переполнение стека не позволяет мне принять ответ, как только я предложу вознаграждение, так что мне придется подождать (правда, я несколько злоупотребляю системой намерений, но это во имя вознаграждения кого-то за отличное вознаграждение). ответ). Конечно, если кто-то сможет дать лучший ответ, больше возможностей для него, и он, безусловно, может получить за это награду!
Редактировать имена : Меня не интересует, как бы вы бы назвали это, если только вы не назовете это так, потому что это так называют власти по этому вопросу. Если это имя, которое вы только что придумали, мне это не интересно. То, что я хочу, это имя, которое я могу найти в учебниках и с Google. (Также вот вам совет: ответ Антала - это то, что я искал. Если ваш ответ не является «развернутым связанным списком» без очень веской причины, это просто неправильно.)