CSCI 132: Basic Data Structures and Algorithms

Catalog description: 4 Credits (3 Lec, 1 Lab). PREREQUISITE: CSCI 127 and M 151Q. An examination of advanced Java and basic data structures and their application in problem solving. Data structures include stacks, queues and lists. An introduction to algorithms employing the data structures to solve various problems including searching and sorting, and recursion. Understanding and using Java class libraries. The laboratory uses Java. Introduces Big-O Notation.

Course Info

This course meets for lectures on Mondays, Wednesdays, and Fridays from 3:10pm-4pm in Reid Hall 103. Please bring a laptop to class so that you can participate in the classwork exercises. Lectures will be recorded and available if you would like to rewatch them. On Thursdays, there is a two-hour lab period in which you can complete the week’s lab assignment and get help from the course assistants. We will use Discord as the primary method of course communication, and all course information will be posted on this website or on the Discord server; D2L will be used only to turn in assignments and for grading.

Course Resources

Java documentation & tutorials

You can find the official java documentation here. I will post additional resources that we use throughout the course as well.

Optional textbook

The textbook is optional for this course. Data Structures and Algorithms in Java; 6th edition, Goodrich, Tamassia, Goldwasser. It is available in the bookstore. I rented the eBook from Amazon from the semester.

Interactive textbook

An organization that I like, Runestone Interactive, makes an interactive textbook just for programmers who are coming from Python to and beginning to learn Java.

Labs & course assistants

There are four lab sections, all of which meet on Thursdays in Roberts Hall 111.

  • 001: 10am-11:50am
  • 002: 12pm-2pm
  • 003: 2:10pm-4pm
  • 004: 4:10pm-6pm

SmartyCats

Computer Science Success Center

There are free tutors available in Barnard 259. More information here.

Discord server

Course outcomes

By the end of this course, students should be able to:

  • Design and implement a class in Java
  • Explain the concept of an ADT
  • Implement linked lists, stacks, queues, and deques
  • Apply consistent documentation and program style standards in Java
  • Be able to determine the time complexity of simple algorithms

Grading

You will be graded on the following:

  • 11 labs: 33%
  • 5 projects: 40%
  • 3 quizzes: 18%
  • interactive textbook assignments: 7%
  • 2 course surveys: 2%

After any curving, your grade will be determined by your total score as follows: 93+: A; 90+: A-; 87+: B+; 83+: B; 80+: B-; 77+: C+; 73+: C; 70+: C-; 67+: D+; 63: D; 60: D-.

Late assignment policies

To run a course of this size we cannot accommodate individual requests for extensions on assignemnts; therefore, we have strict rules for when assignments are due, but have some leeway built in. Please read the bullet points below carefully, respect the policy, and get help early if you are having any problems. We want you to succeed!

  • You are responsible for any announcements about assignments made in class, on Discord, on D2L, and here on the course website.
  • All assignments must be turned in by 11pm on the due date. If you submit a lab or program between 11:01pm and 12 midnight, you get 25% off. If you submit after midnight on the due date but within four days of the due date (Monday at 11pm for labs; Thursday at 11pm for programs) you get 50%. Otherwise, no points are possible.
  • Every student gets one free late pass with no questions asked for labs (not programs). This means you can submit up to four days late (by Monday at 11pm) with no penalty. Use this wisely! If you use this early in the semester and something unforseen happens, you will still need to submit the lab on time or the penalties above apply. Please message the course assistant for your section on Discord to let them know you are using your late pass.

Collaboration policy

On all assignments, you may:

  • Share ideas with others.
  • Help others debug their code (or receive help debugging your code from someone else).

You may not:

  • Share your code with other people.
  • Submit code that you did not write.
  • Modify someone else’s solution and claim it as your own.

Diversity statement

Montana State University’s campuses are committed to providing an environment that emphasizes the dignity and worth of every member of its community and that is free from harassment and discrimination based upon race, color, religion, national origin, creed, service in the uniformed services (as defined in state and federal law), veteran’s status, sex, age, political ideas, marital or family status, pregnancy, physical or mental disability, genetic information, gender identity, gender expression, or sexual orientation. Such an environment is necessary to a healthy learning, working, and living atmosphere because discrimination and harassment undermine human dignity and the positive connection among all people at our University. Acts of discrimination, harassment, sexual misconduct, dating violence, domestic violence, stalking, and retaliation will be addressed consistent with this policy.

Accommodations

If you have a documented disability for which you are or may be requesting an accommodation(s), please contact me and the Office of Disability Services as soon as possible.

How to succeed in this class

What you can do:

  • Keep up with the course by attending class, checking Discord, being aware of the course schedule, and doing all assignments on time.
  • Be an active participant in class. This means asking and answering questions in class and on Discord, seeking help when needed, and contacting the instructor or the course assistants using Discord if you have any questions outside of class time.
  • Be respectful of your classmates, your instructor, and the course assistants.
  • Do your own work.

What I can do:

  • Grade promptly (exact guarantees TBD).
  • Respond to all Discord messages within one business day.
  • Create a course atmosphere conducive to learning by respecting all of my students and being enthusiastic about course material and my role in helping you learn.

Course schedule

DateLecture TopicClassworkLab DueProject DueQuiz
Wednesday 8/24Syllabus & set upGet set up to use Java   
Thursday 8/25  Lab 0  
Friday 8/26Java vs. Python    
Monday 8/29Arrays; for loops    
Wednesday 8/31Reference data types vs. primitive data types    
Thursday 9/1  Lab 1  
Friday 9/2Modifiers    
Labor Day - no class     
Wednesday 9/7Controlling the flow    
Thursday 9/8  Lab 2  
Friday 9/9Example program: CreditCard class    
Monday 9/12Data Structures; Javadoc    
Wednesday 9/14     
Thursday 9/15  Lab 3  
Friday 9/16   Project 1 
Monday 9/19     
Wednesday 9/21     
Thursday 9/22  Lab 4  
Friday 9/23     
Monday 9/26     
Wednesday 9/28     
Thursday 9/29  Lab 5  
Friday 9/30     
Monday 10/3     
Wednesday 10/5     
Tuesday 10/6     
Friday 10/7     
Monday 10/10     
Wednesday 10/12     
Tuesday 10/13     
Friday 10/14     
Monday 10/17     
Wednesday 10/19     
Thursday 10/20     
Friday 10/21     
Monday 10/17     
Wednesday 10/19     
Thursday 10/20     
Friday 10/21     
Monday 10/24     
Wednesday 10/26     
Thursday 10/27     
Friday 10/28     
Monday 10/31     
Wednesday 11/2     
Thursday 11/3     
Friday 11/4     
Monday 11/7     
Wednesday 11/9     
Thursday 11/10     
Veteran’s day - no class     
Monday 11/14     
Wednesday 11/16     
Thursday 11/17     
Friday 11/18     
Fall break     
Monday 11/28     
Wednesday 11/30     
Thursday 12/1     
Friday 12/2     
Monday 12/5     
Wednesday 12/7     
Thursday 12/8     
Friday 12/9     
Final - Monday 12/12, 2:00pm-3:50pm     

Acknowledgments

Thanks to Daniel DeFrance for sharing his syllabus with me.