Alot of good responses have been mentioned here already, but I wanted to add a subset of what is important, but hasn't been covered so far.
After 15 years of post-undergrad professional Software development, I find that I regularly use some of the following concepts from in school:
- General OO concepts, and modern programming language features (classes, data hiding, etc).
- Algorithm performance metrics (Big O notation). When designing an algorithm, performing a Big O analysis to determine the cost of the algorith, and looking at more efficient alternatives in bottleneck areas.
- Linked lists and other complex data structures.
- Fast sorting, and different sorting concepts.
- Trees and fast tree manipulation.
If your language/platform doesn't support Garbage Collection, memory allocation and cleanup are critical, and would be added to the list.