
11.01.2013, 21:08
|
|
|
Modus ponens
модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
|
Можно использовать функцию, которая трансформирует индекс в реальный индекс в массиве, тогда смещение становится "виртуальным", т.е. мы только двигаем нулевой индекс, (но не элемент по нулевому индексу), тогда функция "трансформатор" будет всегда читать нулевой индекс и прибавлять / отнимать чтобы получить реальный индекс.
Например, алгоритм записи по индексу:
1. Проверить вышли ли мы за пределы массива (сложить индекс с реальным индексом нулевого элемента, если результат меньше 0 или больше реальной длины массива - то вышли).
2. Если вышли - посчитать разницу на сколько вышли,
2.а. прибавить разницу к нулевому индексу,
2.б. прибавить необходимое количество пустых элементов к массиву.
3. заменить элемент по индексу на новый.
Другой вариант - использовать два массива. Считать индексы во втором массиве отрицательными.
__________________
Hell is the possibility of sanity
|