CSE 250: Syllabus


Instructor: Xin He
Office: 221 Bell Hall
Regular office hours: Wed. & Fri. 3:00 - 3:50pm
Phone: (716) 645-4741
E-mail: xinhe@buffalo.edu

Lecture: MWF, 2:00 - 2:50pm, Knox 104

A1 - Tue., 1:00 - 1:50pm, 21 Baldy
A2 - Wed., 4:00 - 4:50pm, 21 Baldy
A3 - Thu., 3:00 - 3:50pm, 21 Baldy
A4 - Mon., 9:00 - 9:50am, 21 Baldy
A5 - Mon., 3:00 - 3:50pm, 21 Baldy

Course web site: http://www.cse.Buffalo.EDU/~xinhe/cse250 (user name "cse250", password "students".)


Required textbooks and reading material:
  • W. B. Koffman and P. A. T. Wolfgang, Objects, Abstraction, Data Structures and Design Using C++, John Wiley and Sons, 2006. (ISBN: 0471467553)
  • Classnotes are available from course website. (There are two forms: Classnote01.pdf is for viewing on screen. Classnote01-1x2.pdf is for printing.)

Recommended books:

Though you may find the following books useful, they are not required and have not been ordered for the bookstore:

  • Mark Allen Weiss, Data Structures and Algorithm Analysis in C++, 3rd edition, Addison Wesley, 2006.
  • Bjarne Stroustrup, The C++ Programming Language, 3rd edition, Addison Wesley, 1997.
  • Nicolai M. Josuttis, The C++ Standard Library, Addison-Wesley, 1999.

Prerequisites: CSE 116, CSE 191 or MTH 191, and MTH 142.

Course Description:

This course provides a rigorous analysis of the design, implementation and properties of advanced data structures. Topics include order notation and time-space analysis and tradeoffs in list, tree and graph algorithms, and hashing. The course will survey library implementations of basic data structures in a high-level language. Advanced data structure implementations will be studied in detail. The importance of choosing appropriate data structures when solving a problem will be illustrated by programming projects in C++, a high-level object-oriented language different from the language of CSE115-CSE116. There is no expectation that you have C++ programming background prior to this course, though I will assume that you are familiar with basic object-oriented concepts.

This course is a prerequisite for CSE 305 Introduction to Programming Languages, CSE 331 Introduction to Algorithm Analysis and Design, CSE 396 Introduction to the Theory of Computation, and CSE 435 Information Retrieval.

This course adheres to recommendations made in the ACM's CC2001 Computer Science Volume curriculum document for a third semester data structures course. It covers topics from the following knowledge units: DS5 Graphs and Trees, PF3 Fundamental data structures, AL3 Fundamental computing algorithms. It reviews and reiterates concepts from the following knowledge units (due to the change of languages) PF1 Fundamental programming constructs, AL1 Basic algorithm analysis, PL4 Declarations and types, PL5 Abstraction mechanisms, PL6 Object-oriented programming.

Course Objectives:

At the end of this course you should be able to perform basic analysis of algorithms, understand how various data structures and algorithms function, be able to implement them in a high-level language, and be able to pick an appropriate data structure or algorithm for a given task.

ABET Program Objectives:

Our computer engineering program is accredited by ABET. This course is required of all computer engineering students and has a significant relationship with the following program objectives for computer engineering:

(a) An ability to apply knowledge of mathematics, probability and statistics, computer science and electrical engineering as it applies to the fields of computer software and hardware.

(b) An ability to conduct experiments, as well as to organize, analyze, and interpret data.

(f) An understanding of professional, legal, and ethical issues and responsibilities as it pertains to computer engineering.

This course has a strong relationship with the following program objectives for computer engineering:

(e) An ability to identify, formulate, and solve hardware and software computer engineering problems using sound computer engineering principles.

(k) An ability to use the techniques, skills, and modern hardware and software engineering tools necessary for computer engineering practice.

Course Schedule: Link to course outline, including reading assignments and exam dates.

Computing Resources

You will be given a computer account on the CSE department undergraduate servers. You may use the lab facilities. These facilities are available for use as listed on the course web-site. They are on card-access - use your UB card to open the door.

The name of the server that you will be connecting to in the lab will be nickelback.cse.buffalo.edu. You have the ability to connect to timberlake.cse.buffalo.edu remotely from other sites, on or off campus. Both of these machines are file-served from the same machine.

You are expected to become proficient at using the machines in the lab, the Unix system, the C++ compiler, and whatever other software development tools the course requires you to use. It is your responsibility to ensure that any programs you write for this course compile using the C++ compilers installed on the department's machines.

You are also required to read mail sent to your CSE e-mail account. Any e-mail communication that you send regarding this course must be sent from your CSE e-mail account or your UB e-mail account. Under no circumstances will e-mail from non-UB accounts be acknowledged or answered. You must include an informative subject line in all e-mail, and include your full name in any e-mail correspondence.

All e-mail that we send in reply to your e-mail will be sent to the address from which you sent your e-mail. Our feedback on materials you hand in electronically will be sent to your CSE e-mail account only. Since you may request re-grades of work only within a set period from the time that the feedback was provided to you, it is in your best interest to read your CSE e-mail account on a daily basis.

Course organization
The course has both a lecture and a recitation component. Each component plays a role in helping you achieve the objectives of the course. If you do not participate fully in both you should not expect to do well in the course. Attendance may be taken both in lecture and recitation.

Lectures: The conceptual and theoretical course content will be delivered primarily in the lectures, complemented by readings from the text books. You are required to review readings prior to attending each lecture. You are expected to review the readings again, along with any notes you took, after the lecture.

You are expected to attend all lectures. If you are unable to attend a lecture because of sickness or similar reasons, make sure you get the notes from a classmate. If you miss a significant portion of the semester due to illness, it is recommended that you resign from the course.

Recitation: The recitations are an integral part of the course. They will cover Unix system and C++ programming in detail. Attendance in recitation will therefore be critical for your ability to complete the programming projects.

The recitations may review and extend lecture material and are also an excellent forum for asking more individual questions about the course material than can typically be addressed in lecture. Some material needed to do the programming projects will be covered only in recitation. Attendance in recitation is expected.

Recitations do not meet in the first week of classes.


Assignments consist of both programming projects and written exercises.

There will be programming projects (small or large). They may be weighted unevenly and comparative weights will be announced at the time the project is assigned.

Any programming project submitted after the due date is considered late and will have a 25% penalty (of the maximum score obtainable) imposed per day (24 hours), or portion thereof, late. A programming project submitted four or more days late will be awarded no points.

There will be two midterms and a cumulative final exam. Attendance at scheduled exams is required. The only acceptable excuse for missing an exam is a medical emergency with a note signed by a doctor. No other Make-up exams will be given.

Course Grading:

The following grade weights will be used (I reserve the right to make adjustments to the breakdown if I feel it is necessary):



Assignments 10%
Projects 35%
Midterm I 15%
Midterm II 15%
Final Exam 25%

The percentage weight of each component is tentative. I may revise it slightly. Each component will receive a numerical score. A total percentage score is calculated based on the weighted total of all components. The course letter grade is assigned according to the following table:

Percentage score s

Letter Grade

95 <= s <= 100


90 <= s < 95


85 <= s < 90


80 <= s < 85


75 <= s < 80


70 <= s < 75


65 <= s < 70


60 <= s < 65


50 <= s < 60


0 <= s < 50


Depending on the class average, the curve maybe adjusted downward (for example, a percentage score of 93% may receive A). The curve will not be adjusted upward.


If you have a question about the grading of any piece of work, first consult with the teaching assistant who graded your work. If you cannot resolve your questions with the TA, you should consult with the instructor.

Any questions about the grading of a piece of work must be raised within one week of the date that the work was returned by the TA or the instructor. In other words, if you do not pick up your work in a timely fashion, you may forfeit your right to question the grading of your work.

Incomplete (I) grades

We will follow the UB Undergraduate Catalog Statement on Incomplete Grades, found in the Undergraduate Catalog.

Generally, incomplete ("I") grades are not given. However, very rarely, circumstances truly beyond a student's control prevents him or her from completing work in the course. In such cases the instructor can give a grade of "I". The student will be given instructions and a deadline for completing the work, usually no more than 30 days past the end of the semester. University and department policy dictate that "I" grades can be given only if the following conditions are met:

Incomplete can not be given as a shelter from poor grades. It is your responsibility to make a timely resignation from the course if you are doing poorly for any reason.

Academic Integrity

We will follow the Computer Science and Engineering Policy on Academic Integrity, detailed at

Academic Integrity Policy

as well as University Policy on Academic Integrity, detailed in the Undergraduate Catalog. For more information, see the Student Conduct Rules, University Standards and Administrative Regulations. A good application of these rules to computer science is given on the department's web page. Take the time to familiarize yourself with the contents of these pages.

Pursuant to the Department's policy, anyone found to be in violation of the policies on academic dishonesty will be given a grade of F in the course. This policy applies equally for all violations, be it cheating on an exam or an assignment. For especially flagrant violations, formal proceedings will be initiated. Such proceedings can call for harsher sanction including expulsion from the University.

The department uses an electronic means of cheating detection that make it possible to check the entirety of class submissions with ease.

Example Infractions of Academic Integrity
Examples of conduct considered in violation of the policies on academic integrity include but are not limited to:

If you are stuck, ask a TA or the instructor. We are here to help you learn.