Предположение:
, что вы заботитесь только о производительности, а не о пространстве/памяти/...
Готовили раствор:
То, что индекс представляет собой набор, а не список (будет работать для списка, но может потребоваться дополнительная любовь)
Вы можете сделать очередь и хеш-стол бок о бок.
Пример:
Допустим заказ 5 4 7 1 8 3
Очередь -> 547813
хэш-таблица -> 134578
Епдиеие:
1) Возьмите свой объект и вставьте в хэш-таблицу в правое ведро Min/Max всегда будет первым и последним индексом. (см. отсортированные хеш-таблицы)
2) Затем вставьте в свою очередь, как обычно.
3) Вы можете/должны связать эти два. Одной из идей было бы использовать значение хеш-таблицы в качестве указателя на очередь.
Обе операции с большой хеш-таблицы будет O (1)
Ведиеие:
1) Поп кулак элемент O (1)
2) удалить элемент из хэш-таблицы O (1)
Min/Max:
1) смотреть т х хеш-таблицу. В зависимости от используемого языка теоретически можно найти его, взглянув на голову стола или на хвост таблицы.
Для лучшего объяснения отсортированных хэш-таблиц, https://stackoverflow.com/questions/2007212
Примечания: Я хотел бы отметить, что не существует «нормальная» структура данных, которая будет делать то, что вы требуя, чтобы я не знаю. Однако это не означает, что это невозможно.Если вы попытаетесь реализовать структуру данных, скорее всего, вам придется сделать это для своих нужд и не сможете использовать имеющиеся текущие библиотеки. Вам может потребоваться использовать язык с очень низким уровнем, например, сборку, чтобы достичь этого, но, возможно, C или Java могут иметь возможность, если вы хорошо относитесь к этим языкам.
Успехов
EDITED: я не объяснить отсортированные хэш-таблицы, поэтому добавили ссылку на другой SO, чтобы объяснить их.
Я не уверен, что такая структура данных существует. Возможно, вам захочется смешать очереди и trie (или какие-то сбалансированные деревья), но некоторые операции будут принимать * O (log (n)) * –
Кроме того, [программисты] (http://programmers.stackexchange.com/) вероятно, лучше спросить. –
Можно создать стек, отвечающий всем этим требованиям. Сохраняя значение Min и Max для каждого элемента, мы можем найти Min и Max в O (1), но с очередью сложнее. Я думаю, что должен быть способ, потому что я знаю кого-то, кто это сделал. Но я не знаю, как это сделать. – bman