1 x 1-hour lecture-2 weekly
1 x 2-hour lecture-1 weekly
1 x 2-hour laboratory weekly
3 x 13-hour project works per semester
1 of COMP1102, ENGR1721, COMP1201, ENGR1206
Enrolment not permitted
1 of COMP8801, ENGR2701, ENGR8701 has been successfully completed
Assumed knowledge
Basic Java programming ability as acquired in COMP1102. Students without the assumed knowledge should check with the topic coordinator as to the background required, as there will be no additional assistance to compensate for missing background.
Topic description
This topic provides a second-level exploration of programming, with an emphasis on the data structures that frequently occur in programming problems and the algorithms for traversing and manipulating such structures. The syllabus is built around the theme of data abstraction using object- oriented programming; the main working language is C++, The topic includes an introduction to C++ for students already familiar with another language such as Java.

Specific areas covered include:

  1. Basic data representations, including arrays, records, and strings
  2. Key object-oriented computational techniques, including exception handlers, inheritance, recursion, and dynamic memory allocation
  3. Fundamental linked data structures such as lists, stacks, trees, and graphs, together with the pointer and reference operations for manipulating them
  4. Algorithmic strategies, including brute force, divide-and-conquer, and branch-and-bound approaches
  5. An introduction to algorithmic analysis, including complexity classes and an appreciation for space-time tradeoffs
  6. Fundamental computing algorithms, including a variety of common searching, sorting, and traversal algorithms
Educational aims
This topic aims to equip students with the skills needed to solve programming problems of moderate complexity, such as applications that provide an interface to real-world data. The focus is on object-oriented techniques for representing and manipulating program data using either predefined components or custom-designed components.
Expected learning outcomes
At the completion of the topic, students are expected to be able to:

  1. Understand and appropriately use the language and terminology of data abstraction and object-oriented programming
  2. Describe common data structures and choose appropriate data structures for specific application needs
  3. Write code to build and manipulate common linked data structures
  4. Understand and appropriate use the language and terminology of algorithm analysis
  5. Determine the time and space complexity of simple algorithms
  6. Describe the advantages and disadvantages of different algorithmic approaches in specific application contexts
  7. Implement common searching and sorting algorithms
  8. Read C++ programs and use C++ to solve simple data abstraction problems