## CS251 Data Structures

### TEXT:

**Data Structures and Algorithm Analysis in C++**,
Weiss

### OBJECTIVE:

This course is designed to complete your transformation from computer
programmers to computer scientists. In CS 251 we start to look "under the hood" of various
data structures (some old ones, some new) and investigate how they can be implemented.
After taking this course, writing programs that simply
work will no longer satisfactory - your programs should now work as efficiently as possible,
making use of these data structures and of various algorithmic techniques that are to be covered during
this semester. We will also use this course as an
opportunity to learn a new programming language - C++ - and compare and contrast it with
Java. This will serve as a foundation for a more rigorous study of programming languages in
CS 411 (Language Design and Implementation).

Finally, it is hoped that this course will stimulate an interest in the
more theoretical and aesthetic side of computer science.

### GOALS:

- learn the C++ programming language
- learn the mathematical tools necessary to perform algorithm analysis
- learn the mechanics and the uses of basic data structures such as stacks, queues, lists, hash tables, and priority queues
- learn various types of algorithmic solutions to problems such as divide and conquer, backtracking

### HOMEWORKS:

- Homework 1. Due Sept. 16
- Homework 2. Due Sept. 23
- Homework 3. Due Oct. 16
- Homework 4. Due Oct. 23
- Homework 5. Due Nov. 20
- Homework 6. Due Nov. 25
- Homework 7. Due Dec. 4

### PROJECTS:

- Project 1. Due Sept. 9
- Project 2. Due Sept. 30
- Project 3. Due Nov. 13

### EXAM REVIEWS

- Exam Review 1
- Exam Review 2