600.226: Data Structures

Spring Semester 2006: January 30, 2006 - May 5, 2006

Contents

Basics

Catalog Description: This course covers the design and implementation of data structures including arrays, stacks, queues, linked lists, binary trees, heaps, balanced trees (e.g. 2-3 trees, AVL-trees) and graphs. Other topics include sorting, hashing, memory allocation, and garbage collection. Course work involves both written homework and Java programming assignments.

Prerequisite(s): 600.107: Introduction to Programming in Java (preferred) or 600.109: Introduction to Programming in C/C++; 600.120: Intermediate Programming can be helpful as well.

Academic Honesty: It is your responsibility to adhere to the Department Integrity Code and other applicable university regulations. Feel free to email us your questions or concerns.

Coordinates

Discussion List: cs226-discuss@bloat.org (open discussion, but you must subscribe here first)
Staff List: cs226-staff@bloat.org (to contact all of us, but only staff can subscribe)
Submit Assignment: cs226-submit@bloat.org (we grade your last submission before the deadline)

Lecture: Thursday & Friday, 9:00 am - 10:15 am
Location: 303 Shaffer Hall

Discussion: Monday, noon - 1:00 pm
Location: 317 New Engineering Building

Final Exam: Thursday, May 18, 9:00 am - 12:00 noon

Staff

Instructor: Peter Fröhlich
Office Hours: Thursday & Friday, 11:00 am - 12:00 noon
Location: 326 New Engineering Building

Teaching Assistant: Daniel Abretske
Office Hours: Monday, Tuesday, Wednesday, Friday, noon - 1:00 pm
Location: 225 New Engineering Building

Course Assistant: Huan He
Office Hours: Tuesday, 4:00 pm - 5:00 pm
Location: 225 New Engineering Building

Course Assistant: Jonathan Lasko
Office Hours: Tuesday, 2:00 pm - 3:00 pm
Location: 225 New Engineering Building

Course Assistant: Wei Chen
Office Hours: Monday, 2:00 pm - 3:00 pm
Location: 225 New Engineering Building

Schedule (Tentative)

Week 1: Introduction and Overview (January 30 - February 5)

Lecture:

Reading:

Deadlines:

Week 2: Theoretical Background (February 6 - February 12)

Lecture:

Reading:

Deadlines:

Week 3: Fundamental Data Structures (February 13 - February 19)

Lecture:

Reading:

Deadlines:

Week 4: Linear Data Structures (February 20 - February 26)

Lecture:

Reading:

Deadlines:

Week 5: Hierarchical Data Structures (February 27 - March 5)

Lecture:

Reading:

Deadlines:

Week 6: Graph Data Structures (March 6 - March 12)

Lecture:

Reading:

Deadlines:

Week 7: Sets and Priority Queues (March 13 - March 19)

Lecture:

Reading:

Deadlines:

Week 8: Spring Break (March 20 - March 26)

Week 9: Maps and Hash Tables (March 27 - April 2)

Lecture:

Reading:

Deadlines:

Week 10: Search Trees (April 3 - April 9)

Lecture:

Reading:

Deadlines:

Week 11: Sorting and Selection (April 10 - April 16)

Lecture:

Reading:

Deadlines:

Week 12: Text Processing (April 17 - April 23)

Lecture:

Reading:

Deadlines:

Week 13: Memory Management & File Processing (April 24 - April 30)

Lecture:

Reading:

Deadlines:

Week 14: Review and Outlook (May 1 - May 5)

Lecture:

Reading:

Deadlines:

Resources

Books

While there are lots of useful books for this course, the most important one is the following required text on algorithms and data structures. We will be using Java exclusively, so getting the Java version is highly recommended.

The following books are not required but make for good reading anyway. The first is a recent classic, and a reference that can serve you throughout your career (or at least in 600.363/463 :-). It uses pseudo-code throughout and takes quite a different approach overall; it is also much, much longer.

Comparatively few people seem to know about the following book, but I like it quite a bit. It also uses pseudo-code instead of any particular language, but it is relatively concise.

Speaking of concise, the following book is the most concise text on advanced data structures that I know of; it is also a joy to read, although not necessarily the first time you try.

Since we will be using Java exclusively in the course, and since the required text only introduces the bare minimum, it might be a good idea to have some Java text handy as well. Here are a few options, the first one probably being the most useful.

The following is a popular Java text as well, and it's available for free. In don't like big books very much, but at least this one has a decent reputation. :-)

The official language specification for Java is a good resource to have around, but you can easily access it online, no need to shell out money. The official tutorial is slightly out-of-date, but if you have a lot of catching up to do, you won't really care.

If you already know Java but need a concise reference to carry around without building up more muscle (i.e. something that actually fits into the proverbial nutshell) check this one out:

If you are looking for a concise summary of good Java programming style, the following short booklet comes in handy.

Finally three more general books on programming and software development, all highly recommended (not just for this course); the last one can be particularly useful if you're interested in design issues, and I will sometimes take examples from it.

This list is hardly exhaustive. Feel free to email me suggestions if you find a good book on any of the topics we deal with in the course. :-)

Previous Offerings

Standards

Programming Style

When it comes to issues of programming style, it's more important to develop some consistent style than to develop any particular style; this is different in team projects of course, here everyone should agree on a common style. In terms of grading, the safest thing is to pick a style advocated by some "authoritative" entity (without "mixing and matching" of course); here are some possible style guides.

If you are thinking "Safety first!" pick either the first or the second. The fourth has lots of nice reasoning in it, useful if you are ever asked to define a style for a team.

Animations

Miscellaneous

Tools

Assessment (Tentative)

Assignments (about 12): 50%, Midterms (2): 20%, Final (1): 20%, Participation: 5%, Peer Review: 5%.

Updated: $Id: index.html 497 2006-09-07 04:31:59Z phf $ Validate: XHTML CSS
Copyright © 2002-2006 Peter H. Fröhlich. All rights reserved.