**COMSC-205: Data Structures**
**Spring 2025**

Welcome! Data are everywhere, from the contents of your Instagram feed, to your Google Calendar, to your medical records and much, much more. Organizing data so that they can be used and updated efficiently is key to programming and building software systems. In this course, we will introduce fundamental data structures used to organize data in memory and define more precisely what we mean by efficiency. We will also introduce the Java programming language, which you will use to get hands-on experience working with data structures. # Course Staff - **205-01 Course Instructor**: Barb Lerner (she/her) - Email: blerner@mtholyoke.edu - Office: Clapp 227 - **205-02 Course Instructor**: Tony Liu (he/him) - Email: tliu@mtholyoke.edu - Office: Clapp 207 - **Lab Instructor**: Sage Mahannah (they/them) - Email: smahannah@mtholyoke.edu - Office: Kendade G05 - **Teaching Assistants**: - Ramisa Rahman (she/her) - Cristina Lopez Mendoza (she/her) - Fevronia Van Sickle (she/her) - Hailey Brooks (she/her) - Hanh Pham (she/her) - Isabella Nyawabila (she/her) - Maria Martinez (she/her) - Mitsuki Ito (she/her) - Moktsya Poudyal (she/her) - Sophie Kahn (she/her) # When and Where - **Lecture** - **Barb's lecture, Section 205-01**: Tue Thu 10:30am - 11:45am, Kendade 303 - **Tony's lecture, Section 205-02**: Tue Thu 9am - 10:15am, Kendade 303 - **Labs** - 205L-01: Mon 1:30pm - 4:20pm, Kendade 307 - 205L-02: Tue 1:30pm - 4:20pm, Kendade 307 - 205L-03: Thu 1:30pm - 4:20pm, Kendade 307 - 205L-04: Fri 1:30pm - 4:20pm, Kendade 307 # Office Hours - **Barb, Clapp 227** - Mon 1 - 2pm - Tue 4:30 - 5:30pm - Wed 1 - 2pm - Thu 4:30 - 5:30pm - **Tony, Clapp 207** - Tues 2 - 3pm, 5 - 6pm - Wed 5 - 6pm - Thu 1 - 2pm - **Sage, Kendade 307** - Mon 4:30 - 6:30pm - Fri 4:30 - 6:30pm - **TAs, Kendade 307** - Sun 7 - 9pm - Mon 7 - 10pm - Tue 7 - 9pm - Wed 7 - 9pm Please go to the office hours of your particular section's instructor in order to get the most personalized help! # Course Values (##) You matter in this course Mount Holyoke College and this course embrace a notion of intellectual community that fundamentally depends on diversity along a number of dimensions, including race, ethnicity and national origins, gender and gender identity, sexuality, class, and religion. We all have a shared responsibility to cultivate a climate where everyone in this course is valued and where both they and their ideas are treated with respect. Each voice in the classroom has something of value to contribute and your suggestions for cultivating this environment are highly encouraged. Your success in this class is important to us. If there are aspects of this course that prevent you from learning or exclude you, please let us know as soon as possible. Together we'll develop strategies to meet both your needs and the requirements of the course. (##) Names and Pronouns Everyone has the right to be addressed by the name and pronouns that they use for themselves. You may indicate your preferred name and pronouns in `my.mtholyoke`, which appear on class rosters. Please let the course staff know what name and pronouns we should use for you if they are not on the roster or if they change during the course of the semester. If we or your peers happen to slip up, please give a gentle reminder. **Every student's name and pronouns are to be respected at all times.** (##) Accessibility We are committed to equal access for everyone in the course, regardless of ability. Please let us know if there is anything in the course content or presentation that is hindering your learning experience. Official accommodations for disabilities or disability-related needs are determined through the [Disability Services](https://www.mtholyoke.edu/directory/departments-offices-centers/disability-services) Office. If you need accommodations through Disability Services, you have a right to have these met and kept confidential. You can request accommodations by filling out the [Disability Services Application form](https://www.mtholyoke.edu/directory/departments-offices-centers/disability-services/accommodations) on my.mtholyoke or by contacting Disability Services via email at disability-services@mtholyoke.edu. If you are eligible for academic accommodations, you will be provided with an accommodation letter. Once you receive your letter, please reach out to the instructors to meet and discuss these accommodations. # Learning Objectives By the end of this course, students will be able to: - **Reason about data structures**: Reason about the benefits and tradeoffs of using a collection of data structures based on their structure and the desired goal. - **Implement the data structures**: Write code that converts abstract descriptions of common data structures (and their associated operations) into working implementations. - **Use data structures to solve problems**: Write programs that use implementations of data structures to accomplish intended goals. - **Analyze algorithmic complexity**: Characterize and contrast operations on data structures and common algorithms by reasoning about their time and space complexity. - **Develop programming maturity**: Develop ability to independently identify and resolve errors (logical, compiler, runtime), decode the syntax of a new programming language, search for appropriate resources to solve problems, and learn object-oriented programming concepts. # Scheduled Topics - Introduction to Java - Syntax - Typing - Generics - Compilation - Review of object-oriented programming (OOP) concepts - Classes - Methods - Objects - New object-oriented programming concepts - Inheritance - Interfaces - Abstract classes - Fundamental data structures - Arrays - Lists, Linked Lists - Stacks, Queues - Binary trees, Binary Search Trees - Heaps, Priority Queues - Hash Maps - Graphs - Programming methods, programming complexity - Algorithmic analysis (Big O) - Recursion - Searching - Sorting # Communication (##) Moodle We will use the Moodle sites for scheduling, assignment release, and grades. Below are the links to the respective sites: - [Section 205-01](https://moodle.mtholyoke.edu/course/view.php?id=28926) - [Section 205-02](https://moodle.mtholyoke.edu/course/view.php?id=28927) (##) Ed Discussion We will primarily use Ed for general announcements as well as discussion outside of class sessions and office hours. The system is highly catered to getting you help quickly and efficiently from classmates and the teaching staff. For general questions, rather than emailing, we encourage you to post on Ed. The following is the link to the course's Ed Discussion board: https://edstem.org/us/courses/74163/ You should already have access to the Ed Discussion board. If you do not have access, please reach out to an instructor so we can get you added. (##) Gradescope To streamline submission and grading, all assignments will be submitted through Gradescope. You should have already been added to the Gradescope instances for this course: - [Section 205-01](https://www.gradescope.com/courses/968620) - [Section 205-02](https://www.gradescope.com/courses/957060) If you do not have access to the link corresponding to your section, please reach out to the instructor of your section and we can get you added. (##) Email and Private Ed Posts Email or a private Ed post can be used to answer more specific questions about your work, especially if you do not want to share the details in a public Ed post. If you have a question about a program you are writing, whether we are meeting in person or you are sending us a message, it is important to be specific about the problem you are encountering. In particular, you should be clear about: - What you are trying to do. - The code that you have written that is not working. - What troubleshooting or debugging steps you have already taken. - If you are getting an error message, include the exact text of the error message and indicate where in your code the error occurs. - If your code is not working as you expect, but you are not getting an error message, indicate what output you are expecting and what output you are actually getting. # What You'll be Doing (##) Reading We will be providing freely accessible online reading material at https://comsc205.github.io/readings. These readings will supplement and reinforce the material covered in lecture. (##) In-Class Activities In most lectures, we will have in-class activities such as worksheets or PollEverywhere questions, often done in a group with one or two other students. These activities will give you a chance to self-assess your understanding of the material and work collaboratively with other students. This work is intended to help you master the material and is not graded. (##) Labs Lab time will be devoted to working on questions and short programs with the support of Sage and TAs. These will be your first chance to put the new ideas from lecture to practice in programs. Lab time is an opportunity for exploration and learning. !!! Tip The labs will also get you started on the programming assignments for the week! (##) Written Assignments These assignments conducted through Gradescope will let you apply the course content in a way that will serve as the first steps towards the larger programming assignment. The intent of these assignments is to be able to quickly identify and resolve any confusion before embarking on the programming assignment for the following week. Each written assignment should take 1-2 hours to complete. (##) Programming Assignments Programming assignments will ask you to apply the algorithms and data structures from the lecture and lab to solve specific problems. While you will be asked to plan out a solution and ultimately write a program, you will also be asked to think critically about and reflect on how your solution would impact the people who might use it. Each programming assignment should take 5-6 hours to complete. !!! Tip If you find yourself taking much longer than these estimates for the written and programming assignments, please find some time with the teaching staff during office hours and we can get you back on track! (##) Written Tests There will be a midterm and final exam to test you on the material that you have been learning and practicing in prior work. These will be pencil-and-paper tests focusing on the concepts, similar to the questions done on worksheets and written assignments. (##) Self-Reflections Throughout the semester, we will be asking you to consider the context of how course content impacts you and society. These self-reflections will come in the following form: 1. **Reflection questions associated with each programming assignment.** We will ask short answer questions (~1 page per assignment) that will often consider the ways software design decisions can broadly impact individuals in society. 2. **Course surveys and feedback.** We will periodically check in to ask what is going well for you, what difficulties you are encountering with the material, as well as how you are growing and learning throughout the course. These surveys will also be an opportunity to let us know about any challenges that you may be facing, such as health, technological, or other issues, so that we can work together on a plan to get you back on track. Self-reflections will be graded on good-faith effort. # Assessment | Component | % | |---------------------------|-----| | Labs | 10% | | Written assignments | 20% | | Programming assignments | 35% | | Midterm exam | 15% | | Final exam | 20% | (##) Due dates - Written assignments will be released on **Tuesdays** and due on **Fridays**. - Labs are intended to be submitted at the end of the lab period and are due at **5pm the day of your lab section**. - As programming assignments will be covered in lab, there are separate due dates to better align with the lab schedule: - Section 205-01 (Barb's section): Released on **Mondays** and due on the following **Monday**. - Section 205-02 (Tony's section): Released on **Wednesdays** and due on the following **Wednesday**. The above general due dates may change as the semester progresses, and we will keep the course schedule updated on Ed! (##) Written Assignment Drop Policy The lowest **non-zero** written assignment will be dropped from your grade. Thus, you should always try to submit something for every assignment! (##) Late Submissions and Late Days (###) Lab Assignments We expect that everyone attends their designated lab each week and submit their lab assignment on time. The lab assignments will be graded on good-faith effort, no matter how far you get during lab -- our goal is to get you in lab and working alongside your peers with the support of Sage and the TAs. Therefore, **there are no late days for lab assignments**. However, we also understand that there may be times when you are unable to attend lab due to illness or other extenuating circumstances. If you are planning on missing lab, please email the instructors ahead of time so that we can work together on a plan for you to get the lab assignment done on your own time. (###) Written Assignments There are **no late days for written assignments**. They are expected to be submitted on time so that we can give you timely feedback on how well you are understanding the course material. We emphasize that these assignments should not take more than 1-2 hours, and that we have the drop policy above if something comes up during the semester. (###) Programming Assignments You have **5 late days for programming assignments to use over the course of the semester**. They may be used for any reason and you do not need to ask permission to use them, as we will track the number of late days being used as indicated in your submission. You can ask an instructor of your section at any point during the semester for the number of late days you have remaining. After these late days have expired, you will lose 10% of the assignment's value for each day that it is late. Extensions will be given in the event of extenuating circumstances, such as illness or an unexpected emergency. If this is the case, please reach out to the instructors as soon as possible so we can work together on a plan and timeline for any make-up work. (##) Programming Assignment Resubmission On your initial submission, the above late policy applies. You may resubmit a programming assignment **within two weeks of the original due date**. If you choose to resubmit a programming assignment, you must also include in your submission a short written reflection on what you did differently in your resubmission. Resubmitted programming assignments will receive up to **80%** of the original credit. # How to Get Support The best way to get help is to come to office hours or TA hours. If you are unable to make it to office hours, please reach out to the instructor of your lecture section so we can schedule another time to talk. We also encourage you to work with your peers in a study or accountability group to learn from each other and share ideas. See Section [General Course Policies] of the syllabus to see what forms of collaboration are allowed for individual assignments. Most importantly, learning computer science requires persistence and resilience -- the ability to ride ups and downs. It can take a lot of confidence and bravery to ask a question, but we have found that students who get connected with their instructors, TAs, or peers end up most successful. !!! Tip Ask for help early and often! Reach out on Ed to ask your peers, form a study group, or stop by during our office hours. # How to Succeed in This Course - Attend class! - Be curious. - Ask questions. In class, in lab, in office hours, or over Ed. - Try not to fall behind, but if you do, come and talk to one of us. - Do the assigned readings before class. - Start the homework programming assignments early. You should not expect to be able to complete these assignments in one coding session. - Come to office hours. - Join a study group. - Read your email and check Ed. We will communicate clarifications, due date changes and other important announcements on Ed. You will receive notifications via email about announcements that we post there. - Plan your schedule to give yourself enough time to do the work for this class, your other classes and commitments, and to maintain good health. - Eat well, get exercise and enough sleep! Don't overcommit to extracurriculars. # General Course Policies (##) Attendance and Participation It is important that you attend lecture and lab to engage with your peers and the course material. However, we also understand that unexpected situations sometimes arise. Ultimately, we expect that you communicate with us about what is happening, *especially* if you need to miss several classes. In general, if you miss class, you should find out from a classmate what you missed and then contact the teaching staff if you need additional help. Please let us know about any extended absences so that we can work together to make a plan to make-up any missed work. (##) Collaboration Collaboration can help you better understand course material. We encourage you to collaborate with other students in the following ways: - Create study or accountability groups. - Clarify ambiguities or vague points in class handouts, textbooks, assignments, and labs. - Discuss assignments at a high level to understand what is being asked for, and to discuss related concepts and the high-level approach. - Outline solutions to assignments with others using diagrams or pseudo-code, but not actual code. - Get or give help on how to operate the computer, terminal, or course software. - Get or give some debugging help. Debugging includes identifying a syntax or logical error **but not helping to write or rewrite code.** !!! Warning If you have engaged in any of the above acceptable collaboration activities for an assignment, you **MUST** acknowledge the classmates or TAs with whom you spoke. This acknowledgement should be placed in the README file you submit with your assignment. If you are uncertain whether something is allowed, it is your responsibility to ask a teaching staff member. (##) Online Resources The Internet is a useful resource when learning to solve computer science problems, and in some cases you will be expected to use reference material found online (e.g., documentation for a programming language or library). It is okay to: - Look at resources for a broad topic such as a programming language. This includes information on syntax, built-in Java methods, and error messages. - Use or adapt code from class. - Search for and adapt general concepts related to the programming problem you're trying to solve IF you provide a link to the source you are using (as a comment or in your README). However, it is **NOT** okay to: - Directly copy any code for specific programming or written problems. - Turn in any part of someone else's work as your own (with or without their knowledge). - Share your code or snippets of your own code online, **such as in a public Github repository**. - Use resources during an exam beyond those explicitly allowed in the exam instructions. The general rule of thumb is that if you are looking for general knowledge, searching is ok. If you are looking for an answer to a specific homework question, that is not ok. For example, suppose you are writing a program and you get a compiler error message that you do not understand. Searching for an explanation of the error message is ok. Suppose that you need to call a method and need more information on its parameters or exactly what it does. Searching for information on how to use the library function is ok. Posting a question on StackOverflow asking for help in getting your code to compile or run correctly is not ok. Suppose a homework assignment asks you to write a program that plays Sudoku. Searching for Sudoku rules is ok. Searching for code of programs that play Sudoku is not ok. As the situation arises, we will clarify more specific expectations or deviations from this policy, but it is always your responsibility to ask if you are unsure. (##) Academic Integrity In order to protect the integrity and value of our work together, we expect that all of your work in this class will comply with the MHC Honor Code: !!! I will honor myself, my fellow students and Mount Holyoke College by acting responsibly, honestly and respectfully in both my words and deeds. (##) Large Language Models (LLMs) Policy Large Language Model (LLM)-based assistants, like ChatGPT, Copilot, and Gemini are powerful tools that are having a profound impact across industry and society. These tools can assist in many aspects of programming such as through providing suggestions or even generating code snippets. However, one of the key shortcomings of these models is that they are prone to (often confidently) incorrect output. In order to use these technologies effectively, you must first have a strong conceptual foundation in order to identify and correct any mistakes they may make. As you are still early in your computer science learning journey, one of the goals of this course is to help you develop the skills to **create** well structured programs and reason through programming design choices. This hands-on practice is essential for building your own understanding of the subject. Using LLMs to generate code not only gives you an unfair advantage over your peers but also robs you of the instructional value and the satisfaction that comes from writing and debugging your own code. !!! Warning Therefore, it is against course policy to use any LLM-powered tool to generate code for you. This policy is not just about fairness or compliance; it is primarily about your development as a budding computer scientist. Learning to code independently will enable you to understand the underlying principles of data structures, preparing you for more advanced topics. By mastering these fundamentals now, you will be better equipped to use tools like LLMs effectively later in your career. # Attribution and Licensing This course would not be possible without the lecture and assignment content developed over the years by numerous instructors across the Mount Holyoke College Computer Science Department. Our reading material comes from three sources: - [OpenDSA](https://opendsa.cs.vt.edu/), which is open sourced under the [MIT License](https://opendsa.cs.vt.edu/home/license). - [java4python](https://runestone.academy/ns/books/published/java4python/index.html) by Brad Miller, which is released under the [CC-BY-NC-SA 4.0 license](https://creativecommons.org/licenses/by-nc-sa/4.0/). - [Java, Java, Java](https://runestone.academy/ns/books/published/javajavajava/book-1.html) by Ralph Morelli, Ralph Walde, and Beryl Hoffman, which is released under the [CC-BY 4.0 license](https://creativecommons.org/licenses/by/4.0/).