B-деревья находятся в базах данных.
R-деревья предназначены для географического поиска (например, если у меня есть 10000 фигур, каждая с ограничивающим прямоугольником, разбросанным по 2-D плоскости, какие из этих фигур пересекают произвольную ограничивающую рамку B?)
deques формы в C ++ STL являются растущими векторами (более эффективными по памяти, чем связанные списки, и с постоянным временем для «просмотра» произвольных элементов в середине). Насколько я помню, я никогда не использовал deque в полном объеме (вставка / удаление с обоих концов), но достаточно общего, чтобы вы могли использовать его как стек (вставка / удаление с одного конца) или очередь (вставка с одной стороны, удалить с другой), а также иметь высокопроизводительный доступ для просмотра произвольных элементов в середине.
Я только что закончил читать Обобщения и коллекции Java - часть "дженерики" ранит мою голову, но часть коллекций была полезна, и они указывают на некоторые различия между пропущенными списками и деревьями ( оба могут реализовывать карты / наборы): пропускающие списки дают вам встроенную итерацию с постоянным временем от одного элемента к другому (деревья - это O (log n)) и намного проще для реализации алгоритмов без блокировок в многопоточных ситуациях.
Приоритетные очереди используются для планирования среди прочего (вот веб-страница , в которой кратко обсуждается применение); кучи обычно используются для их реализации. Я также обнаружил, что heapsort (по крайней мере, для меня) является самым простым из всех видов O (n log n) для понимания и реализации.