LINUX.ORG.RU

статическая очередь с доступом по индексу

 ,


0

1

Статическая, то есть, с фиксированным размером. Например, для 5 у меня такой массив

[1 2 3 4 5]
нужно вставить 6 на место 5, 1 выкинуть, остальные сдвинуть влево
[2 3 4 5 6]
Размер большой, операций вставки много. Как тут делается эффективная реализация для таких штук? Может есть готовый код?


Через деревья разного рода. Подойдёт битмап если мн-во относительно компактно, если кусочно компактно, то sparse битмапы.

mashina ★★★★★
()
Последнее исправление: mashina (всего исправлений: 1)

Хотя не совсем понятно. Вставка только в конец идёт, т.е. есть только операция push()?

mashina ★★★★★
()

Если элементы не повторяются, то битовое множество.

ziemin ★★
()
Ответ на: комментарий от qweqwe

Тогда всё очень просто, стуктура данных будет состоять из массива фиксированного размера и оффсета. При каждой вставке пишем значение в ячейку (offset + size - 1) % size и обновляем offset = (offset + 1) % size. Типа ~ кольцевой буфер.

mashina ★★★★★
()
Ответ на: комментарий от mashina

Действительно просто, спасибо за ответ, mashina :)

qweqwe
() автор топика

если хранятся не цифры, а нормальные объекты, то проще всего делать так. Адрес элемента хранится в массиве и вставляется по циклу. Т.е. первая вставка перезаписывает 0 элемент, вторая 1 и т.п. Соответственно получение адреса элемента по индексу это что-то вроде get(i) = p[i + count % len], где count это кол-во вставок, len это длина твоего статической очереди.

vtVitus ★★★★★
()
Последнее исправление: vtVitus (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.