У вас уже есть довольно хорошая реализация. Единственное улучшение, очевидное для меня, заключается в том, что вы выполняете больше работы, чем нужно, выполняя поиск при всплытии. В стеке следует хранить не сам ключ, а индекс в массиве ключей . Это дает вам тривиально быстрое всплывающее окно за счет только одного косвенного указателя, когда вы хотите посмотреть последний элемент.
Просто увеличьте размер стека до LOAD_FACTOR * (размер массива кучи), и вы получите примерно такую же быструю реализацию, какую ожидаете, с минимальным объемом памяти, каким вы можете управлять, учитывая ваши требования к скорости.