Great walkthrough on custom data structures. I have a different take on criteria.
Efficiency should always be subservient to effectiveness. Effectiveness is doing the right thing, and in the context of coding an analytic solution that means optimization for the least efficient component, which is always wetware.
Brian Kernighan nails the two key points