20-ECES-228-001 Data Structures Fall, 2007
Meets:
   T-H 2:00-3:15 in Swift 608

Instructor:
   Name: John Franco
   Office: 821 Rhodes (Office Hours: T-H 11:00-12:00AM)
   Phone: 556-1817
   Email: franco@gauss.ececs.uc.edu
   Web:   http://www.cs.uc.edu/~franco   homepage of instructor.
               http://gauss.ececs.uc.edu/Courses/C228.html  homepage of course.

Grader:
   Xxxx Xxxx (xxxxx@email.uc.edu)
   Office Hours: X:XX-X:XX Xxxxx Xxxxx XXXX

Description:
    The student will learn how to organize data for faster, more maintainable solutions to common programming problems such as sorting, searching, and optimization problems. The course focuses on a few fundamental structures and alternative machine representations. Thus, we consider lists, stacks, queues, trees, graphs, linked lists, heaps, and arrays. The advantages of data abstraction are described and illustrated. Algorithms based on the above topics are developed for some specific problems. Some tools of analysis are presented to provide the student with a rudimentary means of comparing alternative algorithms.

Prerequisite:
    Computer Science II (20-ECES-122).

Grading:
    I will attempt to assign grades according to the descriptions below based on evidence obtained from one midterm exam, one final exam, seven homeworks, and contributory class participation. An "A" student is an excellent performer, has an excellent attitude, and has remarkable creativity, imagination, and knowledge. I would have complete confidence in an "A" student to complete a task with minimal supervision. Usually the "A" student will decide what the task is without supervision (because usually the supervision does not exactly know what the task is). The "A" student is motivated partly by pride and partly by a desire to contribute to satisfying needs of other individuals. A "B" student is a good performer. He or she can be relied on to complete some tasks well. A "B" student has a pretty good understanding of material with perhaps a few gaps here and there. A "B" student will usually have to be told what to do and often cannot act effectively independently of others. A "C" student has learned a few things but is generally unmotivated and cannot be relied upon to complete a task. Unlike a "B" student, a "C" student is often not a hard worker and generally puts a minimal or even inadequate amount of effort into a task. A "D" student is a slacker. An "F" student is hopeless.

Exams will be graded on a scale from 0-100 and each homework will be graded on a scale from 0-10 if completed on time (see below for more details). These results will be used only as a guide to help classify the student as above. It is possible that a student with a higher "average" score will get a lower grade. For example: a student with one low grade but otherwise consistently high grades may be given a relatively high grade with respect to his or her "average" score if I am convinced that the low grade was a fluke. If a student who is unhappy with his or her final grade seeks an adjustment, that student should consult the descriptions above and be prepared to justify his or her claim accordingly.

Homework Policy:
    Seven homeworks will be assigned this quarter. All homeworks are programming assignments: in each, a problem will be posed and the student will write and test C++ code to solve it. Each assignment has a due date and a grader's email address which are clearly indicated. Source code only should be submitted to the grader indicated before the due date indicated. Submissions received on or before the due date will be graded on a 0-10 scale. Points are awarded roughly as follows:

Code does not compile:0 points
Code compiles:3 points
Code compiles and runs: 6 points
Above plus code appears correct:    8 points
Above plus code is readable:9 points
Above plus code is efficient:10 points

Any submission received after the due date will not be graded. The graders will test the code you develop using g++ on a unix box. If your code does not compile using g++ the grader will send a note to you indicating that fact and will request a second version that does compile under g++. So, it is your best interest to use g++. Code compiled using Virtual C++ frequently does not compile under g++.

Policy on Incompletes:
    None given except in extreme emergency (death etc.)

Textbook:
    Data Abstraction and Problem Solving with C++: Walls and Mirrors, 4th Edition by Frank Carrano, Addison-Wesley, ISBN: 0-32124725-6 (2004).

Accounts:
    We will need to use machines that have an ANSI C++ compiler and a text editor. The ideal environment consists of g++ and emacs on a Linux, FreeBSD, or Mac box. There are some Windows IDEs that may be useful as well. If you have a UCENG account you are set. If not, and if you have a Windows based PC at home, and you don't want to spend money, you can download If none of these options is available to you, you may request an account on one of my FreeBSD machines (helios.ececs.uc.edu). Send requests to franco@gauss.ececs.uc.edu.

Joint Work:
    At this early stage in your technical development it is inadvisable for people to be working together unless all parties are contributing about equally. If more than two people submit essentially the same homework they will be asked to explain why and how. If the explanation is inadequate, all parties involved will be dismissed from the course. There is similar intolerance of students hiring someone else to solve homework problems or take exams, and of students using solutions from previous years and posted on course websites.

Approximate Schedule, SUBJECT TO CHANGE
   
WeekClass MaterialReading
1 Review ADT, Linked Lists, Stacks, Queues, etc. Chapters 1,2,3,4,5,6,7
2 Algorithms and Efficiency Notes/Chapter 9
3 Sorting Chapter 9
4 Binary Trees Chapter 10
5 Binary Search Trees, General Trees Chapter 10
6 Review, Midterm ---
7 Tables, Priority Queues, HeapSort Chapter 11
8 Graphs, Digraphs Chapter 13
9 Balanced Trees, B-Trees Chapters 12,14
10 Hashing Chapter 12