Welcome to 15-211, Fundamental Data Structures and Algorithms. James Morris and Christopher Langmead will teach the course.

This course meets for two lectures and one recitation each week. The meeting times are as follows

In addition to the lecturers, a staff of teaching assistants will be handling recitation sessions, office hours, and many aspects of course instruction. Go to the staff section of the website to see when and where you can find course staff members, and check out the how to get help for information about how to make best use of the entire course staff.

Please be certain to check for course announcements by checking the announcements area on the home page or by subscribing to the RSS feed.


The goals for this course are to gain a solid understanding of the following topics:

Students will also develop the study habits and the general resourcefulness required to solve programming problems that are substantially more complex than those encountered in 15-111 or 15-121.

Some of the concepts and skills that will be taught in the course are as follows:

  1. Selection, design, and analysis of data structures and algorithms.
    • Methods for using mathematics to formulate a problem precisely.
    • Techniques for analyzing the suitability of various data structures for solving specific problems.
    • How to find or design an algorithm to solve a problem.
    • Techniques for proving the correctness of an algorithm and analyzing its memory and time requirements.
  2. Principles and techniques for the specification, design, verification, debugging, and testing of programs.
    • Methods for designing and writing code so that it can be more easily understood and maintained by others.
    • The concept of data abstraction and its importance in good program design.
    • Techniques for using modularity to separate cleanly the interface of a software component from its internal implementation.
  3. Introduction to analysis of algorithms.
    • The basic mathematical and logical principles underlying the analysis of the correctness and efficiency of data structures and algorithms.
  4. Programming in Java.
    • Advanced techniques including the use of recursion and references.
    • Elements of object-oriented programming, including the use of objects, classes, and methods.
    • I/O and the use of class libraries.
    • The use of Unit Testing


The recommended text for this course is Data Structures and Problem Solving Using Java, by Mark A. Weiss. You may use either the 3rd or 4th edition. You don't have to buy it, as is it is rather expensive.

We recommend Java Precisely as a reference for the Java language.

We also recommend The Java Programming Language, by Arnold, Gosling, and Holmes (Addison-Wesley, 2005). Another very helpful book is Effective Java by Joshua Bloch (Prentice Hall 2008). It presents a concise reference to many good design idioms for the Java Programming Language.

In addition to the textbooks, lecture notes will be available on this web site.

Communicating with us

There are many ways to communicate with us.

If you need help

By CMU standards this is a large course, about 170 students and a course staff of 9 people. It is likely that there will be times during the semester when you will need help to do well in the course. Because there are so many people, you might wonder who you should see about what. Here are some general guidelines.