CS 231: Data Structures and Algorithms

Title image Fall 2020

Course Information for Fall 2020

Time: CS 231 A MWF 9am
Place:Davis 301
Lab A: Tu 1-2:20pm
Place:Davis 102
Lab B: Tu 7:30-8:50pm

Instructor Information

Prof. Naser Al Madi
Office: Davis 215
Office hours: M 1:00 - 2:30 pm, W 1:00 - 3:00 pm, R 1:00 - 2:30 pm

Prof. Hannen Wolfe
Office: Davis 114
Remote Office Hours: M Th 8-9am, M Tu Th 3-5pm
(please check the calendar for more details on Office Hours)

Lab and Project Links

#LabsProjectsDue Dates
1Java and ArrayListsMonte-Carlo Simulation: Blackjack7 September 2020
22D ArraysCellular Automata Simulation: Game of Life14 September 2020
3StacksSearch Simulation: Sudoku21 September 2020
4Linked ListsAgent-based Simulation: Grouping Behaviors5 October 2020
5QueuesDecision-making Simulation: Checkout Lines19 October 2020
6Binary Search Trees and SetsAnalysis: Word Frequences2 November 2020
7Hash TablesAnalysis: Comparing Data Structures9 November 2020
8Priority Queues: HeapsAnalysis: Word Trends16 November 2020
9GraphsGame: Hunt the Wumpus23 November 2020

Project Guidelines

Much of what you learn in this course will come from implementing a core set of data structures and algorithms. Each week in lab you will implement a new data structure, then use that data structure as the basis for the week's project. Each project will involve either simulation or analysis, mostly related to social science topics. As with all core CS courses, the defined part of the project will constitute about 85% of it. You can choose to stop there, or you can extend the project in ways that are interesting to you for additional credit. Each project will have some suggested extensions, but you are always free to choose your own.

A project will always have a coding part and an associated report. Your code should be well-written, well-commented, and efficient. The report gives you a chance to do two things: explain your code/design to others, and explain the results of your project. These are two different skills, both of which are important for any computer scientist or software developer. The first requires you to explain an algorithm or data structure using natural language. This is necessary in order to communicate or explain ideas in a structured manner. The second requires you to examine the results of your code, analyze whether it is working, and explain either the behavior of your simulation or what you discovered in your analysis. Note that the second part also helps you to ensure your code is working properly.

All projects will be graded out of 30 points. The code and quality comments constitute 21 points, the report constitutes 5 points, and you can earn up to an additional 4 points with extensions. A 30/30 project requires perfect code, a clear and well-written report, and meaningful or significant extensions. Note that doing lots of extensions will not make up for a poor report, code with errors, or code without comments.

The faculty and TAs are available to help you, especially with projects. Please follow the 30-minute rule: if you have not made any progress after 30 minutes of honest effort, stop what you are doing and ask a question of a TA or faculty. The point of the projects is not to be frustrated, but to make progress.

Success in the projects results from starting early, attending lecture and lab, making use of the course resources, and asking questions when you get stuck. All projects, except the last one, will be due on Monday evening by midnight. Projects submitted after the specified deadline will be graded without considering extensions. Any project work must be submitted within a week of the deadline to receive any credit. Submit what you have and move on to the next project.

Online Resources

Online Book Library

The Safari online book collection has many textbooks on Java and data structures.

Algorithm Visualization:

Links to web sites comparing Python to Java:
Links to free online data structures textbooks:
Links to Java online documentation, tutorial, and sample code: Note: The Java tutorial and the JDK API documentation (the first two links below) can be downloaded to your computer so that you don't need web access to view them. They also load a little faster if you use a local copy.
Links to free online Java help:
Links to free Java development environments: