There are a subset of algorithms and data structures that are very common, well-studied and very helpful. Examples of these are Topological sort, quicksort, depth-first search; on the other hand, dictionaries, trees, linked-lists and to a lesser extent red-black trees, and tries, are examples of the latter.
However, there are other algorithms and DS that are not mainstream (not easily found in books) that we have learned on our own, have become a useful tool, and we are proud of using because they were hidden... maybe we found it in a dark paper from the dawn of computation in the 60s and it is still useful today, or we just made them up (why not?). My pet one is binary decision diagrams (BDDs). What is yours?
EDIT: A pity this was closed, but in all fairness, it was a duplicate, even if new answers were provided. In a scholarly fashion, I will summarize and thank everybody for answering. However, to appease my sense of "duplicate failure", I should also pay my respect to the original poster of the question (f3lix) and to the StackOverflow community by summarizing both posts, so a complete document remains. Thus (!), here is the list of algorithms and data structures that are not that common, duplicates removed:
- Bloom filters
- Maintaining order in a list
- Elevator algorithm
- Cuckoo hashing
- Skip lists
- Modifiable priority queues (can someone provide a link for this, please?)
- Non-Deterministic Finite State Machines
- Interval skip lists
- Dancing links
- Tries (or here, with a interesting use of it at this site)
- Suffix tries and Suffix arrays
- Splay trees
- Heap-ordered search trees (can someone provide a link for this, please?)
- Spatial indices, particularly R-Trees and KD-Trees
- Bit arrays
- Ropes
- Van Emde-Boas trees
- MX-CIF Quadtrees
- HAMTs
- Inverted indices
- Disjoint sets
- Pairing heaps
- Treaps
- Binary space partitioning trees
- Binary decision diagrams
- Fusion trees
- B+ trees
- Quad trees
- Octrees
- Range trees (how much we love trees...)
- Linear hashing and Spiral hashing
- Huffman trees
- Circular buffers
- Finger Trees
- Simplex algorithm
- Zobrist Hashing
I hope this will be useful as a reference at some point.