CS 61B: Data Structures and Advanced Programming
General Course Information

Fall 1998


CS61B is the second course in the CS61 series. In this course we will study advanced programming techniques including data structures and basic algorithms for manipulating them, and we will get a taste of ``software engineering''--the development of large programs.

Read this document carefully. It contains most of the answers to questions that students ask during the first few weeks of class. The subjects include: how to contact the staff, prerequisites, textbooks, labs, grading, late penalties, policy on academic misconduct. For a list of discussion sections and labs and the TAs who run them, see the online section schedule. (Because of the high enrollment, some additional TAs and sections may be added, so this schedule will be in flux for the first week or two.) A tentative syllabus is also available, which includes due dates, exam dates, and reading assignments.

To print this document, use the postscript copy available online. If you have a general question about something that is NOT covered here, the best option is to post a message in the cs61b news group. This is read by the course staff and other students, all of whom may be able to answer your question. To contact all of the TAs and the Professor, send mail to cs1b@cory.eecs. If you wish to talk with one of us, the easiest way is to come during the office hours posted on our doors and listed online. Otherwise, please make an appointment by sending electronic mail. Note that there are about 50 of you to every one of us - please reserve e-mail for the questions you can't get answered in office hours, discussions sections, or through the lab assistants.

Prof. Kathy Yelick
Office: 777 Soda Hall
Phone: 642-8900
Email: yelick@pasteur.eecs

Prof. Jonathan Shewchuk
Office: 625 Soda Hall
Phone: 642-3936
Email: jrs@pasteur.eecs

Course Secretary:
Tami White
385 Soda Hall

Teaching Assistants:
Rob von Behren, cs61b-ta@po.eecs
Paul Hale, cs61b-tb@po.eecs
Bob Zasio, cs61b-tc@po.eecs
Yan Chen, cs61b-td@po.eecs
Michael Brudno, cs61b-te@po.eecs
Loren Will, cs61b-tf@po.eecs
TBD, cs61b-tg@po.eecs

Lectures are MWF 10:00-11:00am in 155 Dwinelle.


The prerequisite for CS61B is CS61A or E77N. CS61A is an introductory course taught in Scheme, which covers topics like recursion, higher order functions, object-oriented programming, interpreters, simple data structures (lists and tables), as well as the basics of using the computers in our labs. E77N covers the same topics, but is taught in Matlab. Although Telebears does not prevent someone from registering for the course without prerequisites, checking software is run from time to time that automatically drops such students from the class. See the drop list outside of 379 Soda if you think you may be in this situation.

If you have not taken either 61A or E77N, chances are you will not be admitted to the course. If you have taken a course you feel is very similar to 61A (not just a programming introduction, but one that covers the topics above) you must fill out an appeals form in main CS office, 393 Soda Hall. Appeals are not handled by the course instructors, so please do not attempt to lobby us for admission to the course. If you try to stay in the course when you have not satisfied the prerequisite, you will receive an F as your final grade.

We will be using the Java programming language in this course; knowledge of Java (or related languages like C++) is NOT required for this course. You may have heard that Java is a language for programming web applications and developing cool animated home pages. This is partly true, but neither of these will be covered in this course. We will simply use Java as a better language for writing large, modular programs than many of the alternatives.

If you are already familiar with C++ or Java and have taken a data structures course in any programming language (e.g., Pascal), you may not need to take this course. If you feel this course may be repeating prior experience, please see one of the instructors.

If you are not familiar with the Unix operating system and basic tools, either because you did not take 61A or felt that you managed to get through without understanding much about Unix, it is important that you learn. Some student groups, including CSUA teach help sessions on Unix. See the CSUA home page for others.


There are two required text for the course. The data structures book was used in the Spring and Summer '98 courses, but the introduction to Java is a new book. The texts are:

These should be available at the ASUC bookstore or across Bancroft at either Ned's or the Campus Textbook Exchange. The Arnow and Weiss book (abbreviated A&W in the remainder of this handout) gives an introduction to programming in Java. It is not meant to be a complete reference to all of the concepts in Java. For that, we recommend a text called Teach Yourself Java 1.1 in 21 Days, by Lemay and Perkins. The Weiss book is on data structures and uses Java in the code examples. We will be using the Arnow and Weiss book during the first month of the course, so you should start by purchasing that text. If you feel you need more reference material for Java (in addition to the wealth of documentation available online), then go ahead and purchase the recommended text.

We will keep electronic copies of all handouts and lecture notes on the course machines available from the class home page: http://www-inst.eecs.berkeley.edu/ cs61b. In some cases there may be three types of files: raw ASCII text (filenames ending in .txt) should be printed using the enscript -2r command; postscript files (filenames ending in .ps) must be printed using the lp command; html (filenames ending in .html) should be printed using the print command from netscape.

Finally, we will post various announcements, hints, and so forth electronically. Your accounts will be set up to show the current set of class messages when you login. You should look at the class home page at the beginning of the semester and regularly throughout to find information about online references, handout availability, changes to the course syllabus, etc. In addition, you should start reading the 61B newsgroup regularly, as we will be posting homework clarifications and other material of general interest there. There are many ways to read the news group, but the easiest it to find a pointer to it on the class home page. You should send questions or information of general class-related interest to the news group using the post command.

Laboratory and Discussion Sections

In addition to the lectures, the course consists of a discussion section one hour per week and a scheduled lab two hours per week. The scheduled labs meet between Monday and Wednesday lectures, while the discussion sections meet between Wednesday and Friday lectures. All labs meet in 277 Soda. You should have the same TA and student colleagues in the lab and discussion section. Because of limited space in the labs, you are only allowed to attend a lab in which you are officially enrolled through Telebears. For discussion sections, we will not be that strict, although you are strongly encouraged to attend the section for which you are registered. Your Lab TA will be your ``primary'' TA--he or she will check off your lab assignments, will return your graded homeworks and projects, and can help with grading corrections. You should feel free to attend any of the staff office hours or ask any of us for help.

Students sometimes ask whether section and lab attendance is required or optional. Some of the TAs may use ``mini-quizzes'' in discussion section to give them feedback on how much the class understands and to help focus the discussion, but nothing done in section will directly affect your grade. On the other hand, discussion sections are your best opportunity to ask questions and learn interactively, and there may be examples worked out in section that will be helpful on the graded assignments. Scheduled labs, which are two-hour slots in the first half of the week, are required. Each week there will be a assignment for the lab, and points to be checked off by your TA.

Account forms will be given out in lab this week, so it is important that you attend. If you miss your first lab, account forms will be available from Tami White in 385 Soda. It is important that you login to your account and choose a password during the first week; we use the information about who has logged in along with the Telebears roster to determine who will receive grades in the class. You may only attend a lab if you are scheduled in that lab with Telebears, and because of over-enrollment in the labs (due to a glitch in Telebears setup), students who do not attend the first lab may be dropped from the class.

In addition to the scheduled labs, there will be some periods in which the lab assistants will be available to answer questions in 277 Soda. A list of these times will be posted outside the lab. The Soda labs are open from 7:30am-6:00pm Monday through Friday. Outside of these hours the doors to the building and lab are locked. You will need to obtain a card key for after hours access; these will not be available immediately, because we need an accurate list of who is in the class first. An announcement will be made in lecture when they are ready. For those of you with labs in the late evening, someone from your lab will wait near the 3rd floor entrance of Soda to let you into the building.


If you are something other than a regular Berkeley undergraduate, then you probably need a signature on a form admitting you to the course. Enrollment is unusally high this Fall, so I cannot promise to admit those of you who are not regular Berkeley students. In particular, I will not sign any concurrent enrollment or UC Extension forms until after the second week of classes. Meanwhile, you should get your computer account and begin doing the course work on the assumption that you will be admitted. You will need to choose one of the lab times that is not overbooked. See the online class schedules for enrollment levels.

If you are on the waiting list for the course, the reason is that you are waiting to be admitted to a lab/discussion section that is currently full. You need to choose a section that is not full if you want to take the class. We will try to add enough sections so that everyone with the prerequisites is admitted to the course (subject to TA availability), but the new lab times will be early in the morning or late in the evening. We cannot let you into sections that are full, so if you insist on waiting for a full section to have space, you will not be allowed to attend lab (and therefore not get credit for the lab) and will most likely never be admitted to the course.

Watching Taped Lectures

For those of you who miss lectures, a taped version will be shown MWF from 5-6pm in 9 Evans. In addition, a tape for each lecture will be available for approximately one week in 205 McLaughlin.

Course Work and Grading

There are a total of 200 points you can earn toward your final grade in the course. There will be two midterm exams, each worth 25 points, and a final exam worth 50 points. The tests concentrate on the material that has been covered up to and including the week before the test. The test coverage is cumulative, so material from the beginning of the course may be tested in either midterm or on the final. All exams will be graded by the TAs and Professors.

In addition to exams, there are three types of assignments: homeworks, labs, and projects. Homeworks (roughly one per week) will involve written assignments and programming to be done individually. These will typically be due before lecture on Fridays and will be graded by one of the class readers. Homeworks are worth a total of 20 points out of the 200, and each is equally weighted. Note that each homework assignment may be graded out of a different number of points (say 10 for some and 20 for others), depending on the number of things we want to grade separately. For example, if there are 10 homeworks during the semester, each is worth 2 points of your final grade; if you earn 8 out of 10 points on one assignment, you will get (8/10)*2 points towards your final grade for that assignment. You will find that some homeworks, such as the first one, are much easier than others--they still have the same weight.

Labs are short programming assignments that must be done during the scheduled lab period in the latter part of the week. Labs will be done in teams of two assigned by your Lab TA. Grading of labs will be done by having certain steps checked off by your TA or a lab assistant. Labs are worth 10 points of your final grade, with each one having equal weight. Since we expect you to have conflicts from time to time during the semester, we will ignore your two lowest lab grades.

The remaining 70 points of your final grade will come from the programming projects. There will be four of these during the semester. The first and last projects will be worth 15 points; the second and third will be worth 20 points. All projects will be done with in teams.

Your final letter grade will be determined by the following formula: 185 or above is an A+, 175-184 is an A, and down by ten points each to the lowest passing grade (D-). In other words, there is no curve; your grade will depend only on how you do and not on how well everyone else does. Occasionaly, we {\it may} decide that one assignment or exam was unreasonably difficult, and raise the scores on that assignment. However, our experience is that grades on homeworks and projects are higher than on exams, so you should assume this will be the case for you own grades and not be surprised if your exam grades are lower than your final grade, while your homeworks and projects are higher.

Everything you turn in for grading must show your name, your computer account, and your lab section number. You will receive no credit for assignments that are turned in without this information. Most, if not all, assignments will be turned in electronically. If you believe we have misgraded a midterm exam question or project, return it to your Lab TA with a note explaining the problem. The entire exam or project will be regraded, so be sure to check the solutions to confirm that your final grade will go up after regrading. Your grades will be recorded online and can be viewed using the glookup program. All requests for regrades and recording corrections must be made within 2 weeks after you received the graded assignment or exam. By University policy, final exams may not be regraded.

Grades of Incomplete will be granted only for dire medical or personal emergencies that cause you to miss the final, and only if your work up to that point has been satisfactory.


We will give no credit for written homework or labs turned in after the deadline, so that we can make online solutions available promptly and so that you can discuss those solutions in your discussion sections. Please do not ask for extensions for labs or homework - each of these assignments is worth very few points.

On programming projects, we do allow assignments to be turned in late, but there is a penalty. If an assignment is N hours late, we'll penalize it ceiling(N/3) percent. While this gives you some leeway for putting the final touches on a project, do not stretch the deadlines too far. A project that is one day late will loose 8% and after a few days even a perfect solution may not earn a passing grade.


The two midterms are scheduled to be held in lecture on September 28 and November 2. CS61B is in Final Exam Group 1, for which the final exam is scheduled for Wednesday, 12/9/98, from 8am to 11am. The location of the final will be announced by the University later in the semester.

Policy on Collaboration and Cheating

Cheating directly affects the reputation of the Department and University and lowers the morale of other students. As is consistent with departmental policy, incidents of cheating on homeworks or labs will result in a grade of zero on that assignment, while cheating on projects or exams will result in a failing grade in the course. All incidents of cheating will be reported to the Office of Student Conduct where records of academic misconduct are kept throughout your undergraduate career.

We encourage you to help each other learn the material by discussing the work before you do the assignments. I believe that most students can distinguish between helping other students and cheating. For example, explaining the meaning of question or offering advice on what an error message from the compiler means are both examples interaction that we encourage. On the other hand, there is no reason that you should ever have another student's solution in your possession, either electronically or in hardcopy form. (We will call this the "no code rule".) If you are not sure whether a particular interaction is appropriate, talk to your TA or one of the instructors before you turn in the assignment. If you receive a significant idea from someone in the class, clearly acknowledge them in your solution. Not only is this a good scholarly conduct, it also protects you from accusation of theft of your colleagues' ideas.

Presenting another person's work as your own constitutes cheating, whether that person is a friend, an unknown student in this class or a previous semester's class, or an anonymous programmer on the web who happened to have solved the problem you've been asked to solve. Everything you turn in must be your own doing, and it is your responsibility to make it clear to the graders that it really is your own work. The following activities are specifically forbidden on all graded course work:

Some of the assignments in this course will be done in teams. This will be clearly marked on the assignment, along with rules for choosing a partner. Any assignment that is not designated as a team assignment should be done individually. On team assignments, the above rules for individuals apply to teams: you may not increase the size of your team, exchange partners without our permission, work with another team, or share solutions across teams. Each individual in a team is responsible for the entire project, which means that you will be held responsible if your partner uses another group's solution to produce part of your team's solution.

In my experience, nobody begins the semester with the intention of cheating. Students who cheat do so because they fall behind gradually and then panic, or because they perceive that they have fallen behind when they have not. Some students get into this situation because they are afraid of an unpleasant conversation with a professor if they admit to not understanding something. I would much rather deal with your misunderstanding early than deal with its consequences later. Even if you are convinced that you are the only person in the class that doesn't understand the material, and that it is entirely your fault for having fallen behind, please overcome your feeling of guilt and ask for help as soon as you need it. Also remember that the other students in the class are working under similar constraints--they are taking multiple classes and are sometimes holding down outside employment.