CS 367: Data Structures, Summer 2011

Instructor: Eric Alexander
MTWR 11:00 AM - 12:15 PM
CS 1325
TA: Srividya Doss


Course Description:

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:


Assignments and collaborating:

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.


Testing:

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.


Grading:

The grading breakdown for the course looks as follows:

Participation can include both in-class participation (asking questions, being engaged, showing up) and out-of-class participation (attending my office hours, attending Srividya's office hours). Attending office hours can make up for a lack of participation in class and vice versa.


Late Policy:

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.


Office hours:

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.


Schedule:

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.