COP 4530 Data Structures, Algorithms, and Generic Programming

Course Description:         

Making efficient use of computational resources is one of the important tasks of any computer scientists. In this course we will explore different ways of organizing data to facilitate such sufficient use. This course covers the following topics:
  • Data structures: Abstract data types (ADTs), vector, deque, list, queue, stack, graph, digraph, table, map (associative array), priority queue, set, and tree, etc. 
  • Algorithms: Algorithms are formalizations of processes that result in predictable and desirable outcomes. They are used in a variety of contexts. Particularly, data structures are made usable by implementing algorithms for searching, sorting, and indexing the structures. Algorithm design, complexity analysis and correctness proof form important components in study of algorithms. 
  • Generic programming: Generic programming is the science of component re-use. We will explore coding for re-use of both data structures and algorithms in C++. Coding for re-use and re-use of code are important aspects of software engineering.
We will also have several substantial programming projects that involve the implementation and use of data structures, algorithms, and generic programming.

Course Objective:

The objective of the course is to teach students how to design, write, and analyze the performance of C/C++ programs that handle structured data and perform more complex tasks, typical of larger software projects. Students should acquire skills in using generic principles for data representation and manipulation with a view for efficiency, maintainability, and code-reuse. Successful students will, at the end of the course, be able to demonstrate analytical comprehension of concepts such as abstract data types (vectors, lists, deques, trees, etc.), generic programming techniques (containers, adaptors, accessing data through interface, iterators, etc.), algorithms (sorting, using stacks and queues, tree exploration algorithms, etc.), and efficiency analysis (which data structures allow efficient interfaces to particular forms of data access, such as random vs. sequential data access or insertion). The students should be able to demonstrate similar skills in related implementation tasks in the C/C++ language, including extensive use of templates to allow for modularity and re-usability of code.