I like when a simple data structure works in harmony with a simple algorithm to get really good performance. Like the algorithm would be completely mediocre if you replaced the data structure with something naive, but the data structure "unlocks" it and makes it fast:
- union-find data structure in Kruskal's minimum-spanning-tree algorithm, or for labeling connected components in binary images
- min-heap in Dijkstra's single-source-shortest-paths algorithm
- trie in the Apriori frequent-itemset data mining algorithm
Spatial partition data structures like octrees and kd-trees are really cool. Useful for anything that simulates physical space like games, graphics, CAD systems. Never implemented one myself though.
Least favorite is the red-black tree. It has nice theoretical properties but is so ugly and complicated. Most times I've thought about using one, I ended up choosing a hash table, trie, or sorted array instead. If I ever really need all its properties, I'll go all the way and use a b-tree for its cache friendliness.