Data structures and algorithms I

COSC 202 - Spring 2024


Scott Emrich
Office: 608 Min Kao Hall
Phone: (865) 974-3891; E-mail: semrich at
Office hours: TBD; and by appointment


This course is part one of our two course sequence that focuses on fundamental data structures and associated algorithms. During the semester we will cover basic data structures with a focus on the Standard Template Library (vectors, deques, lists, sets, and maps), basic memory management, queues, stacks, hash tables, binary search trees, binary heaps, recursion, and introductions to both generics (templates) and algorithm analysis. For these topics students are expected to design and implement compilable code with the overall goal of becoming more self-sufficient (C++) programmers. All programming will take place in a Unix environment and will be reinforced by weekly assignments.

Text and syllabus

I have chosen to make the textbook optional given the large number of online (and FREE!) resources available to you, including my and Dr. Plank's historical notes.

That said, when I have previously taught this class students have found the text below an inexpensive but useful resource. Since we'll largely avoid newer C++ syntax (e.g., C++11) any version of this text will work the same as a resource. You should consider this text entirely supplementary, though.

C++ How to Program by Deitel and Deitel.

The syllabus can be found here


Date Topic Homework Notes
1/23/2024 Brief C++ review [Lab 0],
due 1/26 6PM

[Lab 1],
due 1/31 8AM
[CS102/202 review]
1/25/2024 String and STL (review)   [Notes]
1/30/2024 Classes / OOP / Constructors [Lab 2],
due 2/7 8AM
2/01/2024 Code review / making a good interface (.h)   [Notes]
2/06/2024 The rule of three [Lab 3],
due 2/14 8AM
2/08/2024 Polymorphism and exceptions   [Notes]
2/13/2024 Lists, Deques, Iterators [Lab 4],
due 2/21 8AM
2/15/2024 Linked data structures: Stacks, Queues and Doubly linked lists, sorting (STL)   [Notes]
2/20/2024 Intro to Hashing [Lab 5],
due 3/8 3pm
2/22/2024 Collaborative midterm review; resolving collisions w/ separate chaining   [Notes]
2/27/2024 Hash functions: good, bad and in-between   [Challenge]
2/29/2024 Midterm    
3/05/2024 Sets and maps [Lab 6],
due 3/20 8AM
3/07/2024 Big-O   [Historical]
3/19/2024 Recursion [Lab 7],
due 3/27 8AM
3/21/2024 A recursive Sudoku solver   [Historical]
3/26/2024 The basics of trees and binary search trees [Lab 8],
due 4/3 8AM
3/28/2024 Spring recess (no class)    
4/02/2024 AVL trees (1) [Lab 9],
due 4/19 5PM
4/04/2024 AVL trees (2)   [Historical]
4/09/2024 Trees + recursion   (see notes
for Lab 9)
4/11/2024 Templates (Class choice)   [Git code]
4/16/2024 Priority queues and binary heaps [Lab 10],
due 4/26 5PM
4/18/2024 Binary heaps (cont)   [Historical]
4/23/2024 Case study: searching approaches for a sequence container    
4/25/2024 Class choice: study hall to work on labs (open)   [Exercise]
4/30/2024 Class choice: STL and linked lists    
5/02/2024 Case study: circular linked list API    
5/07/2024 Final wrap up/review    

Academic dishonesty

All are required to abide by the EECS and University honor code. Discussions are encouraged, but all answers/programs must be written/developed individually unless explicitly told otherwise (e.g., final lab projects based on student feedback)