This course introduces students the key theoretical topics of computing; including finite state automata, the pushdown automata, and Turing machines.

The purpose of this course is to provide the students to understand the basics, concepts and techniques of data structures. It is aimed to introduce abstract concepts for data organization and manipulation, to show how these concepts are useful in problem solving and how the abstractions can be made concrete by using a programming language.