Overview
The course covers the fundamentals of data structures and object-oriented programming. They are two sides of the same coin. As a programmer becomes more proficient, they realize that how well and efficiently a problem can be solved often depends on how the data are stored. Some of the ideas are quite sophisticated and clever, and we will explore a spectrum of them in this class, ranging from fairly basic to moderately advanced structures.
The other side is that once one realizes the importance of data structures, it is natural to think of programs not as sequences of instructions that pass around some data, but as data packets that come with the code needed to process them. This is at the heart of the object-oriented design paradigm, and often leads to more modular and extensible (and readable) programs. We will learn about the basics of object-oriented programming, along with many of the interesting things that can be naturally done within the paradigm.
The class will put significant emphasis on a theoretical understanding of data structures, their implementation, and the object-oriented viewpoint. Assignments will contain significant programming projects along with programming-free questions to explore how data structures work.
Learning Objectives
- Ability to choose appropriate and efficient data structures and algorithms to solve a problem.
- Ability to compare data structures and algorithms for efficiency using algorithm analysis and experiments.
- Ability to apply algorithm analysis and knowledge of discrete mathematics to evaluate algorithms and data structures.
- Ability to implement and use linear data structures, including stacks, queues, lists.
- Ability to implement and use search structures and algorithms including binary search, search trees, and hash tables.
- Ability to use and implement search data structures, including search trees and hash tables.
- Ability to use and implement priority queues.
- Knowledge of and ability to implement sorting algorithms and compare their performance analytically and empirically.
- Understanding of graphs and their representations; ability to implement graph search using BFS, DFS, and Dijkstra's Algorithm.
- Ability to solve problems using pointers and dynamically managed memory.
- Ability to write recursive functions and understand when recursion is appropriate to a problem.
- Ability to design, document, and implement classes and object hierarchies.
- Ability to apply tools and techniques for program correctness, such as unit testing, use of a symbolic debugger, and assert statements.
- Ability to write readable and maintainable code.
- Ability to explain computational solutions in person and in writing.
Catalog Entry
Introduces the student to standard data structures (linear structures such as linked lists, (balanced) trees, priority queues, and hashtables), using the C++ programming language.
Prerequisites
- CSCI 103: Introduction to Programming
- CSCI 109: Introduction to Computing
Corequisites
- CSCI 170: Discrete Methods in Computer Science
Lecture / Labs
See Sections page.
Course Websites
- All content & info
- Blackboard: For posting grades
- CSCI 104 GitHub Organization
- Piazza
Grading Weights and Scale
Grade Weights
The following point structure will be used in determining the grade for the course. Your final grade will depend solely on your own performance, graded according to the scale given below.
Pct. | Item |
---|---|
40% | Homework |
5% | Lab Exercises |
15% | Midterm 1 |
15% | Midterm 2 |
25% | Final Exam |
Grading Scale
We will guarantee that you will get at least the grade indicated by the following scale. Because of the fairly generous scale we will not round up if you are close to the lower threshold of a letter grade. At the end of the semester, we may decide to lower the scale if the exams were more difficult than intended.
% | Grade | |
---|---|---|
83% | A | |
78% | A- | |
73% | B+ | |
68% | B | |
63% | B- | |
58% | C+ | |
53% | C | |
50% | C- | |
47% | D+ | |
43% | D | |
40% | D- |
Assignments, Quizzes, Rubrics, and Regrades and Grading
See Assignments & Grading page.
This page is a continuation of the syllabus and contains policies related to grading, assignments, and policies related to submission, contesting grades, academic integrity, etc. You are responsible for reading that page carefully and following all of its stated policies!
Textbook
Data Abstraction & Problem Solving with C++, 6th Ed. Carrano & Henry, Pearson, 2013 (ISBN 978-0132923729)
The textbook is supplemental, and may fill in details you are unclear on from lecture.
You should download (and possibly print) the Lecture notes. These are based on teaching of CSCI 104 in past semesters, and cover the material quite accurately as presented in class. However, the lecture notes may be out of order as we have changed the schedule slightly. The lecture is intended as supplemental to the class notes, not a replacement; make sure to use all available resources to maximize your learning experience.
In addition to the lecture notes, we strongly recommend that each student have access to a quality book on the C++ programming language, such as the textbook used for CSCI 103.
Reading Assignments
Readings from the lecture notes and other sources form the base of your learning pyramid. These readings contain theoretical concepts, examples and usable code that will be very helpful for all the work in this course.
It is strongly recommended that students read the relevant chapters of the course notes before coming to class. Class will proceed at a brisk pace and often be more focused on providing extra intuition and discussions rather than rehashing the book content in great detail.
Statement on Academic Conduct
Below is USC's official language. For more detailed information, see also the Assignments & Grading page.
Plagiarism - presenting someone else's ideas as your own, either verbatim or recast in your own words - is a serious academic offense with serious consequences. Please familiarize yourself with the discussion of plagiarism in SCampus in Part B, Section 11, Behavior Violating University Standards https://policy.usc.edu/scampus-part-b/. Other forms of academic dishonesty are equally unacceptable. See additional information in SCampus and university policies on scientific misconduct, http://policy.usc.edu/scientific-misconduct/.
Support Systems
Student Counseling Services (SCS) - (213) 740-7711 - 24/7 on call Free and confidential mental health treatment for students, including short-term psychotherapy, group counseling, stress fitness workshops, and crisis intervention. engemannshc.usc.edu/counseling
National Suicide Prevention Lifeline - 1 (800) 273-8255 Provides free and confidential emotional support to people in suicidal crisis or emotional distress 24 hours a day, 7 days a week. www.suicidepreventionlifeline.org
Relationship and Sexual Violence Prevention Services (RSVP) - (213) 740-4900 - 24/7 on call Free and confidential therapy services, workshops, and training for situations related to gender-based harm. engemannshc.usc.edu/rsvp
Sexual Assault Resource Center For more information about how to get help or help a survivor, rights, reporting options, and additional resources, visit the website: sarc.usc.edu
Office of Equity and Diversity (OED)/Title IX Compliance - (213) 740-5086 Works with faculty, staff, visitors, applicants, and students around issues of protected class. equity.usc.edu
Bias Assessment Response and Support - Incidents of bias, hate crimes and microaggressions need to be reported allowing for appropriate investigation and response. studentaffairs.usc.edu/bias-assessment-response-support
The Office of Disability Services and Programs Provides certification for students with disabilities and helps arrange relevant accommodations. dsp.usc.edu
Student Support and Advocacy - (213) 821-4710 Assists students and families in resolving complex issues adversely affecting their success as a student EX: personal, financial, and academic. studentaffairs.usc.edu/ssa
Diversity at USC Information on events, programs and training, the Diversity Task Force (including representatives for each school), chronology, participation, and various resources for students. diversity.usc.edu
USC Emergency Information Provides safety and other updates, including ways in which instruction will be continued if an officially declared emergency makes travel to campus infeasible. emergency.usc.edu
USC Department of Public Safety - UPC: (213) 740-4321 - HSC: (323) 442-1000 - 24-hour emergency or to report a crime. Provides overall safety to USC community. dps.usc.edu