Куча - это то, что вы хотите. Вот простая реализация двоичной кучи. Будь то максимальная куча или минимальная куча, зависит от функции сравнения, которую вы передаете ей: http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=789
Обратите внимание, что двоичная куча - не единственный способ построить кучу. Но, вероятно, его проще всего построить, и в большинстве случаев он работает достаточно хорошо.
Элементы в куче не отсортированы, хотя они заказаны. Единственная гарантия состоит в том, что самый высокий (самый низкий) элемент находится в верхней части кучи и будет тем, который будет получен при запросе следующего элемента.
То, что вы создаете, звучит как очередь с приоритетами . Существуют и другие способы реализации очереди с приоритетами. Например, я видел список пропущенных приоритетов , который превосходит очередь приоритетов на основе кучи.
Если вам действительно нужно вставить O (1), посмотрите на что-то вроде кучи Фибоначчи .