Introduction to CS241: Data Structures -- Spring 2017
- Instructor : Jim Levenick
- Office: 206 Ford (6486)
- Office Hours: W 1-3
- Or by appt. (send email).
- Email anytime!
- Text: None.
- Materials: back-up media of your choice
Overview:
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.
Approach:
Your Java skills will be developed and refined through writing programs utilizing various data
structures in solving a series of increasingly complex programming problems.
Evaluation:
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 Thursday,
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.
Plagiarism:
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.
Finally:
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.