This course aims to introduce the abstract concepts for data organization and manipulation, show how these concepts are useful in problem solving and how the abstractions can be made concrete by using a programming language. At the end of this course, students are expected to be able to use appropriate data structures for the solution of a given problem. Students will also be able to design and implement abstract data types which use efficient algorithms to manipulate these data structures. Various concepts such as searching, sorting, and algorithm analysis are also introduced.This course aims to introduce the abstract concepts for data organization and manipulation, show how these concepts are useful in problem solving and how the abstractions can be made concrete by using a programming language. At the end of this course, students are expected to be able to use appropriate data structures for the solution of a given problem. Students will also be able to design and implement abstract data types which use efficient algorithms to manipulate these data structures. Various concepts such as searching, sorting, and algorithm analysis are also introduced.