A large part of this syllabus is copied verbatim from a previous incarnation of this course taught by Dr. Hung Ngo in Fall 2012.

Teaching staff

Instructor: Tamal Tanu Biswas

Office: 203 Davis Hall

Email: tamaltan [at] buffalo [dot] edu


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 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. Other C++ features needed for generic implementations 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, 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:

         Have fun learning!

         Basic data structures such as lists, stack, queue, trees, maps, sets, hash tables, search trees, and graphs

o    design and analysis

o    various tradeoffs involved in designing, implementing, and using them

o    design and implement the data structures in C++

         A few basic algorithms such as searching and sorting, recursive algorithms, graph traversing algorithms

         Tentative schedule of topics:

o    3 weeks - C++ (syntax review, OO review, templates, namespaces, pointers, make files, debuggers)

o    2 weeks - Asymptotic notations, properties, recursive algorithms, sorting

o    1 week - Lists, stacks, queues, deques (STL and analysis)

o    3 weeks - Trees (e.g. AVL, Red-black, Splay, 2-3, trie)

o    2 weeks - Hash tables/hashing

o    1 week - Graphs (representations, traversals)

         At the end of this course, each student should be able to:

o    Have a good overall understanding of basic data structures, their design and analysis

o    Know how to implement many of them in C++, and use them in other applications.

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.


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


         Required Textbook: Elliot B. Koffman & Paul A.T. Wolfgang. 2006. Objects, Abstraction, Data Structures and Design: Using C++, Wiley. (ISBN: 0471467553).

         Plus other reading material specified during class


Course's homepage:

Course's blog (Updated very often, please subscribe to the RSS feed):

Work load

         Heavy! So, start early!!

         Approx. 50 pages of reading per week

         8-9 written and programming homework assignments

o    By default assignments are to be done individually

o    I will state explicitly which assignments are group assignments -- there will be very few group assignment if at all

         2 midterm exams

         1 final exam

Grading policy:

         Exam component (50% of the course grade)

o    2 midterm exams (the lower of the two is worth 5%, the higher 15%)

o    1 final exam (30%)

There will be 2 in-class examinations and one final examination at the end of the term. The dates for the midterm exams will be posted on the course's Google calendar. The final examination will be given on a date to be specified by the University. Do not make travel plans for times during the examination period until the final examination schedule has been posted.

If you miss an examination because of sickness or similar reasons, visit a physician and obtain a note detailing the period during which you were medically incapable of taking the exam. Notify your instructor immediately via e-mail or telephone (voice mail) if you are going to miss an exam, before the exam takes place unless medically impossible. See your instructor as soon as you return to class.

If you miss an examination without a valid excuse, you will receive a zero grade for that examination. No make-up examinations will be available without a valid excuse. You must bring a valid form of picture ID with you to each examination (a UB Card will suffice).

         Written and programming assignments component (50%). There will be 8 to 9 assignments (both written and programming). The two lowest-scored assignments are worth 5%. The rest are worth 45%, evenly divided.

         Late submission policy (for projects and assignments)

o    24 hours late: 20% reduction (percentage is calculated from the maximum possible grade).

o    48 hours late: 50% reduction

o    Submissions more than 48 hours late will not be accepted

         Re-grading: 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 teaching assistant, you should consult with the instructor of the course. 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 teaching assistant 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:

o    An Incomplete will only be given for missing a small part of the course.

o    An Incomplete will only be given when the student misses work due to circumstances beyond his/her control.

o    An Incomplete will only be given when the student is passing the course except for the missed material.

o    An Incomplete is to be made up with the original course instructor within the time specified by the appropriate University regulation (see appropriate document above), and usually within the following semester.

o    An Incomplete will not be given to allow the student to informally retake the entire course, and have that grade count as the grade of the original course. Incompletes 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. See your HUB Student Center page for the last day to resign the course, as well as drop/add dates. (Start here.)

         Letter grades. The following table indicates the number to letter grade mapping I will use to assign final grades at the end of the course. The Grade points column is included for your convenience only, and is not official information. The official mapping can be found in the Undergraduate Catalog.

Percentage score

Letter grade

Grade points































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 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 check the course's blog often for announcements, lecture summaries, and other materials. The best way to do so is to "follow" the wordpress blog or is to subscribe to its RSS feed. Please also 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 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.

         Lectures: The conceptual and theoretical course content will be delivered primarily in the lectures, complemented by readings from the textbook and other materials linked to from the course's website and blog. You must review readings prior to attending a lecture, and 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 are out of class for an extended period of time because of sickness, notify your instructor as soon as possible, and see your instructor immediately upon your return in order to determine how to catch up. If you have missed a significant portion of the semester due to illness, it is recommended that you resign from the course.

         Recitations The recitations are an integral part of the course. They will cover 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.

         Time outside of class

Office hours:

Office hours offer you the opportunity to ask more individual questions about the course material than can typically be addressed in lecture. Both the instructor and the teaching assistants have scheduled office hours. Office hours are held on a first-come first-served drop-in basis. No appointment is necessary to attend office hours. Be aware that office hours become increasingly busy the closer it is to a project deadline. Plan your use of office hours accordingly. Individual appointments may be arranged, if needed, as schedules allow.

Study time:

In this course, as in any course, you are expected to put in additional time beyond the scheduled class times. Professors generally expect that for each credit hour a class carries a typical student will put in 2 - 3 hours of time each week outside of class. Since this is a 4 credit course that translates into 8 - 12 hours of time outside of lecture and recitation times, each week. During this time you should review your lecture notes, attend office hours as needed, get hands-on practice applying the concepts and theoretical constructs discussed in class, and possibly arrange to meet in small groups to study or review the concepts from class. As a rough guide, you should expect to spend at least the following time working on this course, each week:

o    Lectures: 3 hours

o    Recitation time: 1 hour

o    Programming assignments: 5 hours

o    Individual study: 4 hours

Academic Honesty:

         No tolerance on plagiarism:

o    0 on the particular assignment/exam for first attempt

o    Fail the course on the second

         Group study/discussion is encouraged, but the submission must be your own work

         On the Programming Assignments: discussions of ideas are welcome, but NO exchanges of source codes, please.

         I will take cheating VERY VERY seriously. Don't waste your time begging!!

         More details from UB's Undergraduate Catalog's Academic Integrity Section, and our department's page.


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:

         Students are encouraged to discuss homework problems with classmates, but the version submitted must be written on your own, in your own words.

         Absolutely no lame excuses please, such as "I have to go home early, allow me to take the test on Nov 1", or "I had a fight with my girlfriend, which effects my performance", blah blah blah. Even when they are true, they are still lame.

         No extra work in the next semester given to improve your grade.