CS3021 Introduction to Data Structures and Intermediate Programming

This second course in the programming practices sequence builds upon the topics covered in CS2020. The first objective of the course is the teaching of data structures and abstract data types. The second objective is the teaching of object-oriented programming concepts such as inheritance and polymorphism. Topics covered include recursion, file input and output, dynamic memory allocation, lists, binary search trees, balanced binary search trees, and hashing techniques. C++ is used in the course.



Lecture Hours


Lab Hours


Course Learning Outcomes

Upon successful completion of this course, you will understand and be able to describe and use or apply as appropriate, the following fundamental chunks of CS knowledge:

  • Develop programs following the principles of object-oriented programming including multiple techniques for security of the attribute data the object cares for.
  • Gain familiarity with the functional style of programming, with use in GUI applications and basic use of function names as variables to be used/passed as arguments and reconstitution into working calls to the desired function. Introduction to lambdas and map-filter-reduce.
  • Describe the time- and space-efficiency of the family of lists/arrays/vectors, maps and binary tree data structures, including inserting and sorting operations.
  • Understand the techniques for implementing lists, deriving queues/stacks from lists, and binary tree data structures.
  • Describe the impact of inheritance and polymorphism in building scalable and modifiable programs, and execute these techniques within multiple programs.
  • Develop programs using abstract data types such as trees and maps/hash tables.
  • Develop reusable modules that can be integrated into different programs, understand the basics of library usage (importing in Python).
  • Gain familiarity with using a unit testing framework.
  • Demonstrate practical application of all the above aspects in a large student-specified, small-group executed, program. Specifying the task, the functionality points and scope of the project, transitioning that into an implementation strategy, and then executing through completion.