Только не понял Автор захотел изначально построить на обычном массиве..? Если это сделать на двухсвязном списке, то вставка и удаление за одну операцию (фиксированное количество операций: нужно будет лишь менять указатель и временно сохранять в во временной переменной)
Здравствуйте: введите язык Go он легчи C но там очень здорова обучать Многопоточности, многоядерность + встроен гербечь коллектор попробуйте ввести язык Go
индекс можно вычислять путём шифровки номера, и брать из этой шифровки нужное количество знаков (1,2 или 3) тогда по всем индексам будет примерно одинаковое количество номеров. Крипто-процессор обычно бывает встроенный.