CSC 226 algorithms and data structures