This course will cover the study of data structures (including stacks, queues, trees, graphs, hash tables, and more). We will consider how to implement each of these data structures, algorithms that make use of them, and how to calculate their efficiency. It is assumed that those taking this course have experience using Java or some other object-oriented programming language from an introductory programming course. Students new to Java or wanting to brush up may wish to refer to the following links:
There will be two types of assignments in this course: programming assignments and written assignments.
There will be roughly five programming assignments. For the programming assignments, you are encouraged to work in pairs. This means that you are to engage in pair programming, a programming model in which two programmers sit together at a single computer and take turns "driving" at the keyboard. While one programmer is typing, the other is actively providing insight, programming ideas, and checking for bugs. Research has shown that programmers tend to find programming in this manner to be more fun than when sitting at a computer alone, and they have more confidence in their solutions. If you would rather work alone, you may do so--however, you will be expected to create programs of the same quality as your partnered peers.
For the written assignments, each person will be required to turn in his or her own solution. You are allowed to collaborate with each other--in fact, this is encouraged. However, you may NOT copy solutions and you MUST give credit where credit is due. To ellaborate, you may discuss problems together and share ideas. You may not write up solutions together--this should be done by yourself. If you share ideas with someone, make sure that you cite them in the heading of your assignment. If you have a question about where I draw this line, ask me.
There will be two tests in this course. The first will occur roughly halfway through the course and the second will occur at the very end.
The grading breakdown for the course looks as follows:
Each student will be alotted five late days over the course of the eight weeks. To activate a late day, write an email to myself (ealexand AT cs DOT wisc DOT edu) and Srividya (krsdoss AT cs DOT wisc DOT edu) before the assignment is due, saying you would like to activate one (or more) late day(s). Doing so pushes back the due date 24 hours. You do not need to justify the use of late days--they are my gift to you. After you have used your allotment, no late work will be accepted. Be sure not to squander them.
My office is in the CS building, room 1308 (last office on your left when entering through the southern entryway). My office hours this summer are scheduled from 2:00 PM to 3:00 PM, Monday through Wednesday. Additionally, I will be in my office pretty consistently most days, and you're welcome to just pop by and stick your head in to say hello and talk about computer science, life, the latest Patrick Rothfuss book, or anything else that might be on your mind. If you want to be sure I'm around, shoot me an email and we can schedule a time to meet.
Srividya's will be holding both office hours and lab hours. Her lab hours will be from 12:30 PM to 2:30 PM on Monday and Wednesday, as well as from 10:30 AM - 12:30 PM on Friday. These will be held in the Mumble lab on the first floor of the CS building. Her office hours will be held in CS room 5364 and will be from 12:30 PM to 2:30 PM on Thursdays.
This is where I will post lesson topics, readings, homework assignments, and other scheduled events. If you're interested in reading ahead, the complete set of lecture notes can be found here.
Date | Topics covered | Readings | Assignments |
---|---|---|---|
Mon 6/13 | Introduction, Lists | Introduction | Assignment 0 due 6/15 @ 10:00AM |
Tue 6/14 | Lists continued, Exceptions | Lists, Exceptions | |
Wed 6/15 | Linked Lists, Big-O Notation | Linked Lists, Complexity | Assignment 1 due 6/20 @ 9:00AM |
Thu 6/16 | Big-O Notation continued | ||
Mon 6/20 | Amortized run-time, Stacks and Queues | Stacks and Queues | |
Tue 6/21 | Stacks and queues continued | ||
Wed 6/22 | Stacks and queues continued | Assignment 2 due 6/29 @ 9:00AM | |
Thu 6/23 | Recursion | Recursion | |
Mon 6/27 | Recursion continued | ||
Tue 6/28 | Searching | Searching | Assignment 3 due 7/6 @ 9:00AM |
Wed 6/29 | Trees | Trees | |
Thu 6/30 | Trees continued (traversals, etc.) | ||
Tue 7/5 | Binary Search Trees | Binary-Search-Trees | |
Wed 7/6 | Binary Search Trees continued | ||
Thu 7/7 | Exam 1 (everything through Searching) | Exam 1 Details | |
Mon 7/11 | AVL Trees | AVL Trees | |
Tue 7/12 | Priority Queues and Heaps | Priority Queues and Heaps | Assignment 4 due 7/20 @ 9:00AM |
Wed 7/13 | Hashing | Hashing | |
Thu 7/14 | In-class lab day | ||
Mon 7/18 | Graphs | Graphs | |
Tue 7/19 | Graphs continued | ||
Wed 7/20 | Graphs continued | Assignment 5 due 7/26 @ 9:00 AM | |
Thu 7/21 | Silly sorts | Sorting | |
Mon 7/25 | Merge sort | ||
Tue 7/26 | Quick sort | Assignment 6 due 8/2 @ 9:00 AM | |
Wed 7/27 | In-class lab day | ||
Thu 7/28 | Selection | ||
Mon 8/1 | Assorted Topics | ||
Tue 8/2 | Review day | ||
Wed 8/3 | Review day | ||
Thu 8/4 | Exam 2 | Exam 2 Details |
Note: Future schedule is tentative and subject to change.