This course is designed for the students to design and implement abstract data types such as lists, stacks, queues and trees for solving complex programming problems. Students will be able to evaluate and assess the efficiency of algorithms in terms of run-time and memory complexity.