School of Computer Science The University of Adelaide Australia
Computer Science Home
Staff Only
text zoom: S | M | L

School of Computer Science
Level 4
Ingkarni Wardli Building
SA 5005

Telephone: +61 8 8313 4729
Facsimile: +61 8 8313 4366

You are here: Computer Science > Courses > Level-1 > adds

COMP SCI 1103/1103BR Algorithm Design and Data Structures

COMP SCI 2103/2103BR Algorithm Design and Data Structures for Engineers


Builds on the foundation provided by the COMP SCI 1101-1102 sequence to introduce the fundamental concepts of data structures and the algorithms that proceed from them, and aspects of software engineering. Topics include recursion, the underlying philosophy of object-oriented programming, fundamental data structures (including stacks, queues, linked lists, hash tables, and trees), the basics of algorithmic analysis, and an introduction to the principles of language translation. - Review of elementary programming concepts - Fundamental data structures: Stacks; queues; linked lists - Object-oriented programming: Object-oriented design; encapsulation and information hiding; classes; separation of behaviour and implementation; class hierarchies; inheritance; polymorphism - Fundamental computing algorithms: O(N log N) sorting algorithms; - Recursion: The concept of recursion; recursive mathematical functions; simple recursive procedures; divide-and-conquer strategies; recursive backtracking; implementation of recursion - Basic algorithmic analysis: Asymptotic analysis of upper and average complexity bounds; identifying differences among best, average, and worst case behaviours; big "O," little "o," omega, and theta notation; - Algorithmic strategies: Brute-force algorithms; greedy algorithms; divide-and-conquer; backtracking; branch-and-bound; heuristics; pattern matching and string/text algorithms; numerical approximation algorithms - Overview of programming languages: Programming paradigms - Software engineering: Software validation; testing fundamentals, including test plan creation and test case generation; object-oriented testing - Software evolution: Software maintenance; characteristics of maintainable software; reengineering; legacy systems; software reuse.

Course Details

  • Coordinating Unit: School of Computer Science
  • Course Coordinator: Dr. Mingyu Guo
  • Term: Semester 1
  • Level: Undergraduate
  • Location/s: North Terrace Campus
  • Units: 3
  • Contact: Up to 6 hours per week
  • Available for Study Abroad and Exchange: Y
  • Prerequisites: COMP SCI 1009, COMP SCI 1102 or COMP SCI 1202
  • Incompatible: COMP SCI 1203
  • Restrictions: Available to B Eng (Software Engineering) and other non-Engineering degree students only

Course Learning Outcomes

At the end of this course, students will:

  1. be able to competently program in C/C++ in the OO paradigm,
  2. be able to manage memory usage in C/C++ programs,
  3. be able to explain fundamental computing algorithms,
  4. be able to analyse algorithms and identify key algorithmic strategies,
  5. be familiar with fundamental software engineering practices,
  6. have an overview of programming language design issues,
  7. have developed their professional writing skills,
  8. have developed their problem solving skills,
  9. have worked in small group and team environments,
  10. have an overview of ethics in computer science,
  11. understand what abstract data types are, and
  12. be able to apply elementary abstract data types to solve programming problems.


Recommended: The textbook for this course is: "Problem Solving with C++", 9e Global Edition, Walter Savitch, ISBN-13:9781292018249, Addison-Wesley, 2015. Recommended: Students who have Java as a programming language and are entering this course are strongly encouraged to make use of the simple on-line resource that will be made available on the course website, closer to the start of term.


The weekly pattern is three one-hour lectures and a two-hour practical session, with a tutorial every fortnight. The outline course content is:
  • Week 1 Review of fundamental C/C++ programming techniques, pointer arithmetic and function pointers, memory errors and core dumps
  • Week 2 Abstract data types and class hierarchies
  • Week 3 Inheritance, friends, and overloading
  • Week 4 Using classes, OO Design principles, testing and design
  • Week 5 Principles of software re-use and maintenance, recursion
  • Week 6 Ethics, polymorphism, using ADTs to produce usable structures
  • Week 7 Introduction to complexity analysis, upper and lower complexity bounds, best-case and worst-case, big O, little o, omega and theta
  • Week 8 Complexity analysis, searching and sorting Algorithms
  • Week 9 Recursive complexity, linked lists and stacks
  • Week 10 Queues, other linked list based data structures
  • Week 11 Trees, algorithmic strategies
  • Week 12 Problem solving, programming paradigms, introduction to type systems
The course is structured to take you from an introductory knowledge of C++ to a higher level, as well as addressing some key areas of computer programming and algorithm design. The summary of the areas covered in this course are:
  1. Review and development of previous knowledge of C++
  2. Fundamental data structures
  3. Object-oriented Programming
  4. Fundamental Computing Algorithms
  5. Recursion
  6. Basic Algorithmic Analysis
  7. Algorithmic Strategies
  8. Overview of programming languages
  9. Software Engineering
  10. Software Evolution
  11. Professional Skills Development

Course Offerings

North Tce, Adelaide
  • 2016 Semester 2 (Current offering)