Data structures and algorithms I

COSC 140 - Spring 2021


Scott Emrich
Office: 608 Min Kao Hall
Phone: (865) 974-3891; E-mail: semrich at
Office hours: Thursday 10:30-11:30am; 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 I/O, files, pointers and basic memory management, lists, queues, stacks, hash tables and an introduction to 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 should be the same. 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/21/2021 Unix, text editors, files and compiling [Lab 0],
due 1/28 2AM
1/26/2021 C++ review -- reading from standard in   [Notes]
1/28/2021 Output -- cout and friends [Lab 1],
due 2/3 2AM
2/2/2021 String and vector basics [Notes]
2/4/2021 Argc, argv and stringstreams [Lab 2],
due 2/10 2AM
2/9/2021 Procedures   [Historical]
2/11/2021 Intro to classes [Lab 3],
due 2/17 2AM
2/16/2021 OOP (cont)   [Notes]
2/18/2021 Pointers, constructors, deconstructors [Lab 4],
due 2/24 2AM
2/23/2021 Collaborative midterm review; random numbers [Lab 5],
due 3/3 2AM
see link above
2/25/2021 Polymorphism and exceptions   [Notes]
3/2/2021 Midterm    
3/4/2021 The rule of three [Lab 6],
due 3/10 2AM
3/9/2021 Lists [Lab 7],
due 3/17 2AM
3/11/2021 Deques, Iterators   [Historical]
3/16/2021 Hashing [Lab 8],
due 3/24 2AM
3/18/2021 Separate chaining, hash functions   [Challenge]
3/23/2021 Sets and maps [Lab 9],
due 3/31 8AM
3/25/2021 Big-O   [Historical]
3/30/2021 Linked data structures: Stacks, Queues and Doubly linked lists [Lab 10],
due 4/7 8AM
4/1/2021 Recursion   [Historical]
4/6/2021 A recursive Sudoku solver [Lab 11],
due 4/14 8AM
4/8/2021 Code review / making a good interface (.h)   [Notes]
4/13/2021 The basics of trees and binary search trees [Lab 12],
due 4/28 8AM
4/15/2021 Binary tree operations   [Challenge]
4/20/2021 AVL trees (1)   [Historical]
4/22/2021 AVL trees (2)    
4/27/2021 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)