A significant part of this syllabus is copied verbatim from a previous incarnation of this course taught by Adrienne Decker in 2009.

Teaching staff

Role Name Office Email
Instructor Hung Q. Ngo 338L Davis hungngo [at] buffalo
TA Mr. Tamal Biswas 302 Davis tamaltan [at] buffalo
TA Ms. Zakieh S. Hashemifar 302 Davis zakiehsa [at] buffalo
See our calendar for office hours.

Course description

This course covers the design, analysis, and implementation of basic data structures in C++. Algorithms operating on the data structures are also covered. It is fundamentally a course about data structures, not about C++. However, as we will implement some of the data structures in C++, basic aspects of C++ and (very little) object oriented programming in C++ are also covered. We will start with a brief discussion of the C++ programming language. Then, we survey fundamental data structures (array, vector, lists, queue, stack, hash map, trees, and possibly graphs) and how we can make use of them in C++. Then, we delve deeper into the design, analysis and implementation of such data structures. Asymptotic analysis of algorithms and data structures is discussed. Amortized analysis will also be discussed. Other C++ features needed for generic implmentations of the data structures are introduced along the way.

The importance of choosing appropriate data structures when solving a problem will be illustrated by programming assignments in C++. C++ is 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, CSE 435 Information Retrieval, and CSE 429 Algorithms for Modern Computing Systems.

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

ABET Program Objectives

Computer Engineering

Our computer engineering (CEN) 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:

Computer Science

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

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


CSE 115/116, 119. Basic Object-Oriented Design Concepts. Basic Discrete Mathematics Concepts. Elementrary Calculus.


Course's homepage:

CSE 250 Q&A Site on piazza, where you ask questions, you and I answer

Work load

Grading policy:

Computing Resources

You will be provided with a CSE undergraduate computing account. The name of the server that you will be connecting to in the lab will be You have the ability to connect to

and many other servers remotely from other sites, on or off campus. Please see the list of servers on the department's IT services page for more information.

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 check the course Piazza Q&A site often for announcements, lecture summaries, and other materials. Please also read mail sent to your CSE e-mail account. Any e-mail communication that you send regarding this course should be sent from your CSE e-mail account or your UB e-mail account. E-mails from non-UB accounts will likely not be acknowledged nor answered. Please include an informative subject line in all e-mails, 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 component 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.

Academic Honesty:


If you have a diagnosed disability (physical, learning, or psychological) that will make it difficult for you to carry out the course work as outlined, or that requires accommodations such as recruiting note-takers, readers, or extended time on exams or assignments, you must consult with the Office of Disability Services (25 Capen Hall, Tel: 645-2608, TTY: 645-2616, Fax: 645-3116, You must advise your instructor during the first two weeks of the course so that we may review possible arrangements for reasonable accommodations.

Counseling Center

Your attention is called to the Counseling Center (645-2720), 120 Richmond Quad. The Counseling Center staff are trained to help you deal with a wide range of issues, including how to study effectively and how to deal with exam-related stress. Services are free and confidential. Their web site is

Misc. Items: