Yeah same with me, Data Structures. I'd be hard pressed to create a circular queue again but there's never really a need.

The professor who taught most of my upper division comp sci classes was a real OO advocate. It was from him I learned how to implement a facade and a singleton. Big skills used all of the time.

I still recall the dining philosophers problem as well as the barber shop problem, very important for any multi-threaded applications, semaphores and the like. I think that was the Operating Systems class...

Funny you should mention Objective-C, I've been using it quite a bit lately, learning the ropes and so forth. Coming from a Java background the most annoying thing is dealing with its memory management model. I have been spoiled by Java's garbage collector. Using retain and release is much better then dealing with pointers though.