COSC 202 - Spring 2026

Instructor

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

Overview

This course is the first in a two-course sequence on fundamental data structures and their associated algorithms. It emphasizes both how common data structures work and when they should be used.

Over the semester, we will study core data structures and concepts in C++, including arrays and Standard Template Library (STL) containers (vectors, deques, lists, sets, and maps), stacks and queues, hash tables, binary search trees, and binary heaps. We will also develop recursive problem-solving techniques, and build intuition for algorithmic performance and complexity.

The course balances the use of STL abstractions with selected hand-implemented data structures in order to strengthen understanding of underlying behavior, tradeoffs, and performance implications. Students are expected to design, implement, and debug correct, compilable C++ programs, with the goal of becoming more self-sufficient and confident programmers.

All programming will take place in a Unix environment and will be reinforced through regular, structured programming 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 by clicking below:

[Syllabus link]

Schedule

Date Topic Homework Notes
1/20/2026 Brief C++ review [Lab 0],
due 1/22 11PM

[Lab 1],
due 1/28 11PM
[Notes]
[CS102/202 review]
1/22/2026 String and STL (review)   [Notes]
[Historical]
1/27/2026 Classes / OOP / Constructors [Lab 2],
due 2/4 11PM
[Notes]
[Historical]
1/29/2026 Code review / making a good interface (.h)   [Notes]
2/03/2026 The rule of three [Lab 3],
due 2/11 11 PM
[Notes]
[Historical]
2/05/2026 Polymorphism and exceptions   [Notes]
[Historical]
2/10/2026 Lists, Deques, Iterators, Sorting (STL) [Lab 4],
due 2/18 11 PM
[Notes]
[Historical]
2/12/2026 Linked data structures: Stacks, Queues and Doubly linked lists   [Notes]
[Historical]
2/17/2026 Intro to Hashing [Lab 5],
due 3/5 11pm
[Historical]
2/19/2026 Collaborative midterm review; resolving collisions w/ separate chaining   [Notes]
2/24/2026 Why hash tables work (and when they don’t)   [Challenge]
2/26/2026 Midterm    
3/03/2026 Formalizing performance: Big-O & practical cost models   [Historical]
3/05/2026 Sets and maps [Lab 6],
due 3/18 11pm
[Notes]
[Historical]
3/10/2026 Spring break (no class)    
3/12/2026 Spring break (no class)    
3/17/2026 Recursion [Lab 7],
due 3/26 11pm
[Historical]
3/19/2026 A recursive Sudoku solver   [Historical]
3/24/2026 The basics of trees and binary search trees [Lab 8],
due 4/2 11pm
[Historical]
3/26/2026 AVL trees (1)   [Historical]
3/31/2026 AVL trees (2) [Lab 9],
due 4/9 11pm
(see notes
for Lab 9)
4/02/2026 Spring recess - no class    
4/07/2026 Trees and Recursion    
4/09/2026 Maintaining invariants: Global rebuild vs local repair    
4/14/2026 Priority queues and binary heaps [Lab 10],
due 4/22 11PM
[Historical]
4/16/2026 Binary heaps and AVL review   [Historical]
4/21/2026 Collaborative review for upcoming final    
4/23/2026 Case study: circular linked list API
(class choice)
   
4/28/2026 Final lab synthesis block (class choice)    
4/30/2026 Class choice: Beyond data structures -- UT CS graduate student "round table"    
5/05/2026 Optional early final exam    

Academic dishonesty

All students are required to abide by the EECS and University Honor Code.

Discussion of concepts and general approaches with classmates is encouraged; however, unless explicitly stated otherwise, all submitted code and written answers must be developed and written individually.

You may use external resources—including documentation, textbooks, and generative AI tools—as learning aids (e.g., to clarify syntax, understand error messages, or review general concepts). However, relying on such tools to generate substantial portions of assignment solutions, complete implementations, or logic specific to a graded task is not permitted.

If you are unsure whether a particular use is allowed, please ask. As a guiding principle: if you could not explain or re-derive the solution without the tool, then its use was inappropriate. Submitted work must reflect your own understanding and effort.

Exams are individual, closed to generative AI tools, and are designed to assess this understanding and effort; therefore, it is in your best interest to engage fully with all assignments.