Programming and Data Structures

Building on Computational Thinking, this course develops students' ability to apply Object-Oriented Programming (OOP) principles through problem-solving using common data structures and algorithms. Topics covered include:
• Principles and application of OOP.
• Program complexity, recursion, and proofs by induction.
• Common data structures and algorithms, and their applications.
• Comparative analysis of data structures and their optimality.

Course Overview

The course builds on the programming foundation established in the first semester and introduces Object-Oriented Programming using C++. Students learn how to design classes, objects and abstract data types before progressing to algorithm analysis, recursion and complexity. The course then explores fundamental and advanced data structures, graph algorithms, searching, sorting and hashing, equipping students to design efficient solutions for computational problems.

Learning Outcomes

  • Apply Object-Oriented Programming principles using classes, objects and methods.
  • Analyze algorithmic complexity using Big-O notation.
  • Select appropriate data structures and algorithms for different computational problems.
  • Compare solutions based on computational efficiency and scalability.
  • Y. Daniel Liang, Introduction to Programming with C++ (3/e).
  • Behrouz A. Forouzan and Richard F. Gilberg, C++ Programming: An Object-Oriented Approach (1/e).
  • E. Balagurusamy, Object-Oriented Programming with C++ (8/e).
  • Adam Drozdek, Data Structures and Algorithms in C++ (4/e).

Additional Reading

  • Y. Langsam et al., Data Structures using C and C++ (2/e).
  • J. Wengrow, A Common-Sense Guide to Data Structures and Algorithms (2/e).

Assessments and Grading

  • Best 2 of 3 Tests: 40%
  • Best 1 of 2 Programming Assessments: 20%
  • End-Sem Examination: 40%
  • Relative grading applies.