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:
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.