Scott Emrich
Office: 608 Min Kao Hall
Phone: (865) 974-3891; E-mail: semrich at utk.edu
Office hours: Thursday 10:30-11:30am; and by appointment
Overview
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
Schedule
Date | Topic | Homework | Notes |
1/21/2021 | Unix, text editors, files and compiling | [Lab 0], due 1/28 2AM |
[Notes] [Historical] |
1/26/2021 | C++ review -- reading from standard in | [Notes] [Historical] |
|
1/28/2021 | Output -- cout and friends | [Lab 1], due 2/3 2AM |
[Historical] |
2/2/2021 | String and vector basics | [Notes] [Historical] |
|
2/4/2021 | Argc, argv and stringstreams | [Lab 2], due 2/10 2AM |
[Notes] [Historical] |
2/9/2021 | Procedures | [Historical] | |
2/11/2021 | Intro to classes | [Lab 3], due 2/17 2AM |
[Notes] [Historical] |
2/16/2021 | OOP (cont) | [Notes] | |
2/18/2021 | Pointers, constructors, deconstructors | [Lab 4], due 2/24 2AM |
[Notes] [Historical] |
2/23/2021 | Collaborative midterm review; random numbers | [Lab 5], due 3/3 2AM |
see link above |
2/25/2021 | Polymorphism and exceptions | [Notes] [Historical] |
|
3/2/2021 | Midterm | ||
3/4/2021 | The rule of three | [Lab 6], due 3/10 2AM |
[Notes] [Historical] |
3/9/2021 | Lists | [Lab 7], due 3/17 2AM |
[Notes] [Historical] |
3/11/2021 | Deques, Iterators | [Historical] | |
3/16/2021 | Hashing | [Lab 8], due 3/24 2AM |
[Notes] [Historical] |
3/18/2021 | Separate chaining, hash functions | [Challenge] | |
3/23/2021 | Sets and maps | [Lab 9], due 3/31 8AM |
[Notes] [Historical] |
3/25/2021 | Big-O | [Historical] | |
3/30/2021 | Linked data structures: Stacks, Queues and Doubly linked lists | [Lab 10], due 4/7 8AM |
[Notes] [Historical] |
4/1/2021 | Recursion |   | [Historical] |
4/6/2021 | A recursive Sudoku solver | [Lab 11], due 4/14 8AM |
[Historical] | 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 |
[Historical] |
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 |
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)