Comp 121 Syllabus

(Subject to change)



COURSE OVERVIEW:  This course is an introduction to data structures, their implementation and their efficiency. We will cover a variety of data structures including: stacks, lists, dictionaries, trees, binary search trees, and queues. For each we will learn: what abstraction the data structure provides to its user, alternatives for implementing the data structure, methods for analyzing the efficiency of different implementations, and how to evaluate the suitability of a particular implementation for a given problem.

This material will be learned through a combination of reading assignments, analysis assignments and program writing. One objective of the course is to further develop your programming skill. There will be 6 - 7 programming assignments that implement data structures and use them to solve practical problems. These programs will give you further practice in the use of loop invariants, pre / post conditions, and abstract data types. Their grading will emphasize program documentation, testing, and programming style.

TOPICS TO BE COVERED:  The primary emphasis of the course will be data structures with an introduction to the algorithms commonly used on them.  A secondary goal will be to teach you object-oriented programming using C++.  The topics covered will all be taken from the primary textbook (GTM).  The precise coverage will be determined as the course progresses.

ATTENDANCE:  Students are expected to attend all classes, to be prepared for each class by having completed the assigned reading before class, and to be alert and involved during class.  The class meetings will only partly consist of lectures, and they will require your active participation and discussion.   You also will be assigned various exercises for in-class practice.  Some of these will be graded.  Students who sit in the back half of the classroom will automatically receive a 10% deduction from their final grade, unless they have previously  received approval from the instructor.  Everyone is expected to be courteous to all in this class.


GRADING:  The composition of each person's grade will be as follows (subject to change): In addition to these items, the instructor reserves the right to give pop tests, if the students do not seem to be coming to class prepared.  If pop tests are given, their weight will be taken from the 30% for tests listed above.

The above percentages add to 100%, however, I reserve the right to apply up to a 10% adjustment, to give consideration to things such as good class participation, unusual improvement over time in your work, outstanding programs and bona fide extenuating circumstances.  In addition to the above, you must obtain a collective passing grade in the programming assignments in order to pass this course.

The final letter grade will be determined only after the final numerical grades have been calculated at the end of the course.  At various times throughout the semester, students will be given guidance of how they are doing with respect to the rest of the class.

The number of points per assignment or question will depend on its perceived level of difficulty and time required.

PROGRAMMING ASSIGNMENTS:  Unless otherwise specified, assignments will be due at the beginning of class. Barring documented tragedy, assignments will not be accepted after the due date and time without severe penalty - it will be to your advantage to submit assignments on time, even if not completed. You are not permitted to work in groups, execpt as explicitely indicated by the instructor: all your work must be your own, and you must attest to this by a signed statement upon the cover sheet that must accompany each program submission.  However, it is permitted that you have study groups for the purpose of discussing the material covered in course lectures and the textbook and the details of the C++ language.  Only general conversations about the individual homework assignments may take place. 

However, there may be some team programming assignments, either in class or as homework.  In either case, teams will be determined before-hand in class.  Team members will need to work together on team assignments and to help one another master the course material.  Team members will evaluate their individual teammates' contributions to the team; this evaluation will be factored into individual's scores on team assignments.

WARNING - Some of the programming assignments will be very similar to the assignments from previous offerings of this course.  It will also be possible to find solutions on the internet.  You are NOT allowed to use, look at or examine any solutions to the assignments from previous offerings of this course or to obtain even partial solutions from the web before handing in assignments.  Do not look at the work done by the students from previous years or the solutions passed out to previous classes.  Doing so constitutes a violation of the Honor Code.  Anyone suspected of violating the UNC Honor Code will be reported.  It is important that you understand that learning to program well, like any other skill, requires practice.  This course is designed to help you grow your programming skills so that you may one day be a true professional.  If you use other people's ideas, techniques, or code, you will be simply short changing yourself.

All handed in assignments, tests and exams are to have the student's signed pledge that the work is his own.

HOW TO SUCCEED IN THIS COURSE (adapted from last semester)

1.  Learn C++ quickly.  Get started today  reading the GTM textbook and completing the first programming assignments.  We will do lots of programming in this course, and all of it will be in C++, although there might be a smattering of C, which is a subset of C++.  The more quickly you learn the language the better off you will be.  Whatever you do, do not get behind at the beginning of the semester.  This will be disastrous.  The course moves at a very fast pace; getting a week behind will be fatal and 3 days behind is a disaster.

2.  Start early on all assignments.  If a programming assignment takes 10 hours of work to complete (warning: many of them will take longer) and you start the assignment exactly ten hours before it is due, you have no hope of getting it done.  Why?  First, if you absolutely, positively need to get on a computer - you won’t be able to.  They will all be in use, a network will be down, a printer not working, etc.  This is a basic Law of the Universe; they know when you are desperate.  More importantly, ten hours of work spread over five to seven days is completely different than ten hours in one marathon session; you simply can't work effectively once you get tired.  Here is some advice from students who took this course previously:

"Don't, I repeat DON'T, procrastinate."
"Start the assignment the day it is handed out."
"Don't wait until the last minute."

Take it from those who found out the hard way.

3.  Complete all reading assignments before class.  Our activities in class will assume you are familiar with the material in the readings for the day.  Class time will be spent on the motivation for the concepts, their relationship to other material and learning how to apply them (before you have to do it in an assignment).  If you have not done the reading, you won't get much out of class.

4.  Participate in class.  With lots of classmates, this seems scary, but it is not so bad once you get used to it.

5.  Think in class.  Since we will not be spending lots of time rehashing the material in the textbook, you won't have to take lots of notes.  Instead, you should be figuring out the material.

6.  Review your class notes after each class.  A good self-test is: Can I explain the material to someone else?  Use your study teams to regularly review course material.

7.  Be formal and precise in your homework assignments and programs.