Fall 2009: Computer Science II, Data Structures, 22C:021
Coordinates
The course meets 2.30--3.20 pm Monday, Wednesday, and Friday
at 112 MH. Each student is also registered for and will attend a weekly
discussion section conducted by our TA.
Content
In brief, the course will be about problem solving using data structures, with Java as the language
for expressing our ideas. See
this previous offering to get a rough idea of the course.
Here is an "official" course description: The second course required for computer science majors and minors emphasizes the design, implementation, and analysis of common data structures and algorithms. The goal is to teach how data structures provide the necessary data abstraction for the development of large software systems and their central role in software engineering. Data structures covered include sets, linked lists, stacks, queues, hash tables, trees, heaps, and graphs. Students are introduced to algorithms for searching, sorting, and data structure manipulation and learn the techniques to analyze program efficiency. Programming using recursion and dynamic data structures are covered. The programming language is Java.
For our textbook, we will use
"Data Structures and Algorithm Analysis in Java 2/E" by Weiss, ISBN 0321370139. After the first couple
of weeks of lectures and discussion sections, this book will become quite readable.
Prerequisites
Computer Science I (22C:016). Discrete Structures (22C:019) is
a corequisite if not taken as a prerequisite.
Grading
The grading will be based on several homeworks (50 percent), of which
there be nine or ten, one midterm (20 points) and
one final (30 points). Most of the homeworks will involve Java
programming.
Exam Dates
The midterm will be in class on Wednesday, October 14.
The final exam is on Tuesday, Dec 15, at 7:30 am in our regular classroom.
Teaching Assistant and Discussion Sections
Each of the students in the class is registered for a discussion section
that he/she is expected to attend. The TA for the class is
Marcus Ernster. He will lead
discussions according to the following schedule.
Section Time Location
A01 8:30-9:20 Th 205 MLH
A02 3:30-4:20 Th 116 MLH
Office Hours
Kasturi 4.00-5.00 Mon, 1.30-2.30 Tue, 4.00-5.00 Wed 101E MLH
Marcus 11.00-12.30, Mon and Fri
Handouts and Notes
- First Day Handout
- Java Lecture Notes. We need only the notes
for the first four weeks for the most part. Use these notes as a reference if you need to
understand something related to the programming language.
- A first java program that checks for balance, Aug 26.
- Slides used on Aug 26
- Our stack, generalized.
- Slides used on Aug 28. Please note that slides
often do not summarize the lectures, because much of the lectures is done on the blackboard.
- An Eclipse Tutorial
you may find useful.
- A variant of the code we wrote in class on Aug 31 to study
a linked list implementation.
- Implementing a stack using linked lists rather than arrays,
Sep 2.
- Interfaces: Illustration using a general purpose method
to find the maximum in an array, Sep 2 and 4.
- A A generic stack class , Sep 4.
- Slides on Generic methods, classes, and interfaces , Sept 9.
- A generic class ,
a generic method , and
a use of a generic interface
- An example with lists and iterators , Monday Sep 14. (Corresponds
to Section 3.3 of text.)
- On Wednesday, Sept 16, we studied the interfaces implemented by the ArrayList and LinkedList
classes (Section 3.3 of the book). We very briefly talked about recursion.
- On Friday, Sept 18, we will study the author's implementation of ArrayList in Section 3.4
of the book. Our discussion will be based on the following
modified version of the code in Figures 3.15 and 3.16. In our modification,
ArrayListIterator is a top-level class (as in Figure 3.18) and not an inner class as
in Figures 3.15 and 3.16. Here are the slides used in the
lecture.
- The Java programs in the textbook are available at the
author's site .
- On Monday, Sept 21, we will study the author's implementation of LinkedList in Section 3.5
of the book. Our discussion will be based on the following
modified version of the code in that section. The code is modified so that
(a) LinkedListIterator and Node are top level classes and (b) the iterator implementation does
not check for concurrent modification. Here are the slides
used in the lecture.
- A simple recursive program to print a number out in base 7, and
a corresponding non-recursive program that uses a stack to
"effect" the recursion.
- A binary search tree of integers with search and insertion
capabilities. Two versions of insert are given -- a recursive and a non-recursive one.(Sep 30
and Oct 2).
- A binary search tree with a delete method added. The
recursive delete and insert roughly correspond to the code in Section 4.3 of the book.
- Slides on Hash Tables based on textbook, Oct 16.
- Using a library hash table implementation , Oct 19.
- Slides on Priority Queue Implementation based on textbook.
- Slides on Mergesort and Quicksort code from textbook.
- A basic class for representing directed
graphs, and corresponding slides
- A simple program to illustrate threads.
This example partitions the task of searching an
array among two threads.
Homeworks
- On Wednesday, Sep 2, we will discuss the Queue data structure and a possible implementation
using arrays. The first homework, based on this, is to provide the corresponding code for
the outlined MyQueue class . After writing the code, you can
test it using the main method I have written. The homework is due Sep 9, at 11.59 pm. You
should submit the source code (the .java files) into a folder in icon that I will create for this homework.
- On Friday, Sep 11, we will discuss an implementation of the Queue data structure using doubly
linked lists. The second homework is to provide the code corresponding to this implementation
for the outlined MyQueue class . The homework is due
Sep 18, at 11:59 pm. Again, look for a dropbox named Homework2 in icon to submit the source
code. You may find it useful to study our stack implementation
using singly linked lists, and to look at the overview of linked lists in Section 3.2
of the book.
- Homework 3, due Sep 30 at 11:59 pm. Look for a dropbox named Homework3
in icon to submit the source code. Please note that in describing the homework, I have assumed
that you have been following the discussion in class to some degree. If you have not been doing
that, please read Sections 3.3, 3.4, and 3.5 of the text.
- Homework 4, due Oct 9 at 11:59 pm. Look for a dropbox named Homework4
in icon to submit the source code.
- Homework 5, due Oct 23 at 11:59 pm. Look for a dropbox named Homework5 in icon to submit the source code.
- Homework 6, due Nov 4 at 11:59 pm. Look for
a dropbox named Homework6 in icon.
- Homework 7, due Nov 18 at 11:59 pm. Note that
this home work is worth 1.5 times a regular homework.
- Homework 8, due Dec 7 at 11:59 pm.