## CS251 Data Structures

## Fall 2016

### 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

### OUTCOMES:

- students will be able to solve programming problems using the C++ programming language.
- students will be able to explain the similarities and differences between Java and C++.
- students will be able to solve mathematical problems involving summations and recurrence relations and apply them to the analysis of algorithms and data structures.
- students will be able to select the appropriate data structure -- trees, hash tables and/or priority queues -- and use them to solve various programming problems.

### HOMEWORKS:

- Homework 1. Due Sept. 26
- Homework 2. Due Sept. 30

### PROJECTS:

- Project 1. Due Sept. 14

### EXAM REVIEWS