CMPT 225 Data Structures & Programming
Undergraduate course, Simon Fraser University, School of Computing Science, 2024
One of the most important courses in the CS program. In SFU this is a pre-requisite course for over 20 CMPT courses and it is for good reasons: it teaches some of the most fundamental concepts in CS (e.g., abstract data types, algorithms, data structures) that are used in many advanced CS topics; it also teaches some programming techniques so students can comfortably implement those concepts and write their own programs. C++ is the programming language of choice (some versions use Java, goal is to have some form of OOP).
It is not an easy course and there are many things to cover (things ramp up very quickly after the first month). But a student who successfully completes this course will have the basic skillset to take on many other more complex CS subjects. My goal is to train students to have the mindset of a computer scientist and be able to both apply CS concepts to problem-solving, and appreciate the ideas behind those concepts.
This is for reference only. For actual outline refer to the course webpage at Canvas (our LMS). Content is subject to change (plus I often update it). This is the schedule I used for Summer 2024.
Course Description
Introduction to a variety of practical and important data structures and methods for implementation and for experimental and analytical evaluation. Topics include: stacks, queues and lists; search trees; hash tables and algorithms; efficient sorting; object-oriented programming; time and space efficiency analysis; and experimental evaluation.
Course Objectives
This course explores fundamental algorithms and data structures that can help in developing elegant and efficient solutions to complex problems. We will study their specification, analysis, implementation (in C++), evaluation, and applications. Platform: Linux (Ubuntu) Language: C++.
By the end of this course students should be able to:
- Design and implement solutions to problems using C++
- Explain, analyze, and compare algorithms in terms of performance
- Describe and utilize fundamental computing science concepts such as data structures
- Maintain good coding practice and style
Recommended Textbooks
- (DSA-C++ Book) Goodrich, M. T., Tamassia, R., & Mount, D. M. (2011). Data structures and algorithms in C++ (Second edition.). Wiley. Online access (requires SFU login)
- Carrano, Henry, & Henry, Timothy. (2017). Data abstraction & problem solving with C++ : walls and mirrors / Frank M. Carrano, University of Rhode Island, Timothy M. Henry, New England Institute of Technology. (Seventh edition.). Pearson.
- Stroustrup, B. (2024). Programming : principles and practice using C++ / Bjarne Stroustrup. (Third edition.). Addison-Wesley. Online access (requires SFU login)
Course Schedule
Week | Topics | Readings/Watchings1 |
---|---|---|
1 | Course intro C++ primer
| DSA-C++ Book: Ch. 1.1, 1.2 |
2 | C++ basics
| DSA-C++ Book: Ch. 1.3, 1.4 |
3 | C++ with OOP
| DSA-C++ Book: Ch. 1.5-1.8, Ch. 2.1-2.3 |
4 | Basic data structures
| DSA-C++ Book: Ch. 5.1-5.2, Ch. 3.2-3.3 |
5 | Basic algorithms (Part 1)
| DSA-C++ Book: Ch. 4.1-4.2 |
6 | Basic algorithms (Part 2)
| DSA-C++ Book: Ch. 11.1-11.3 (Sorting), Ch. 7.1-7.3 (BTs & BSTs) |
7 | Review & midterm | - |
8 | More data structures (Part 1)
| DSAC-C++ Book: Ch. 10.1-10.2, 10.4 (in this course I suggested my students to refer to the code covered in the lectures/labs) |
9 | More data structures (Part 2)
| DSA-C++ Book: Ch. 8 |
10 | More data structures (Part 3)
| DSA-C++ Book: Ch. 13.1-13.5 (in this course I suggested my students to refer to the code covered in the lectures/labs) |
11 | More data structures (Part 4)
| DSA-C++ Book: Ch. 9.2 (in this course I suggested my students to refer to the code covered in the lectures/labs) |
12 | More data structures (Part 5)
| DSA-C++ Book: Ch. 11.4-11.5 |
13 | More algorithms
| - |
?? | Final Exam | - |
Handy Online References
- Supplementary explanations of C++ [LINK]
- Supplementary descriptions of DSA [LINK]
- Helpful visualization of algorithms [LINK]
- Another helpful visulization of algorithms [LINK]
References in Topics/Readings are for reference only. If there is any topic/concept that is in conflict between class slides and any of these references, what is taught in the classes will be used. ↩