Introduction to CS241: Data Structures -- Spring 2015


This course may serve either as the second half of an introduction to programming and computing for use in other disciplines, or as the second course in a minor or major in Computer Science. Students will become familiar with tools and techniques used routinely by computer scientists; these include sorts, searches, dynamic programming, and analysis thereof. Upon successful completion of this course you will have confidence in your ability to solve a wide variety of programming problems using Java.

The majority of time will be spent: 1) becoming proficient at Object Oriented Design and Object Oriented Programming, 2) learning commonly used data structures and sorting algorithms, and 3) implementing and using them to solve various programming problems.

When possible, programming assignments will involve games, graphics, and, perhaps some simple simulations.

The data structures we will study include: lists, tables, and trees. These will be used in both solving practical problems and addressing theoretical issues. We will also study the running times of various algorithms (both theoretically and empirically) together with when and why efficiency matters.

We will become familiar with a number of sorts; they are included in this outline of topics.


Your Java skills will be developed and refined through writing programs utilizing various data structures in solving a series of increasingly complex programming problems.


Your grade will be determined by your performance on exams and quizzes, labs, and group projects. Labs will count 30%, exams and quizzes 70%. The other components may move your grade as much as a full letter grade in either direction.

There will be a mid-term, a final, and a number of quizzes. The final will count twice as much as the mid-term; the quizzes will comprise the remainder of the exam portion of the grade. Quizzes will be every Friday, with some exceptions. Exams and quizzes will test the skills you have learned through accomplishing the labs, along with material from lectures and any assigned readings.

There will be 4-6 substantial Java programming projects plus numerous smaller exercises. Lab grades will be based on both functionality and style.


All work you hand in as your own must be your own; you may not hand in anyone else's work (unless you credit your source). The learning you do by programming cannot be accomplished any other way. The penalty for plagiarism is failure in the course. It is okay to ask for help when you are stuck, otherwise some tiny detail may keep you from completing your work; but do not rely on anyone else to do the thinking part of the programming; the learning you will do in completing programs yourself will pay off throughout the term and beyond.


If you have ideas for programming projects, please feel free to make suggestions. I'm on the lookout for interesting and relevant applications for projects; especially ideas from your other classes. Last, and most important, if you find that I am assuming that you know things that you don't; tell me immediately! Students have very different backgrounds, and it is impossible for me to guess exactly what everyone has been exposed to. If you have questions or suggestions too involved to cover during class, please feel free to bring them up during office hours, or send me email.