Data Structures & Algorithms with O-O Design Patterns in C#