In this course students will learn to describe, explain, and implement abstract data types including stacks, queues, lists, sets, hash tables, maps, and graphs using any programming language. Students will implement a variety of algorithms for searching and sorting, including linear search, binary search, insertion sort, selection sort, merge sort, quicksort, and heap sort. Students will also analyze the time and space efficiency of data structures and algorithms.