copyright Steve J. Hodges

CS 21

Course Information

Learning Outcomes

  1. Design, write, document, test, and debug standard algorithms and data structures using an object-oriented programming language.
  2. Analyze and evaluate common computational problems and select and implement algorithms to solve them.


  1. Apply principles of software engineering to design and develop moderately sized programs using procedural and object-oriented approaches.
  2. Use standard terminology to describe and explain fundamental data structures and abstract data types (ADTs) including lists, sorted list, stacks, queues, priority queues, sets, binary trees, binary search trees, heaps, tables, and graphs in terms of structure, client interface, implementation, efficiency, and typical usage.
  3. Select appropriate standard ADTs to use as building blocks in larger programs. Modify existing ADTs to add or alter functionality, and use them as building blocks for new ADTs.
  4. Recognize the need for new ADTs, and specify, design, code, test, debug, and document them in C++ or Java.
  5. Explain the difference between an ADT and an implementation of an ADT. Describe two or more alternative implementations of at least two standard ADTs.
  6. Analyze, compare, and contrast similar ADTs, ADT implementations, and other algorithms in terms of functionality, time and space-efficiency, ease of use, and ease of coding.
  7. Use recursion to implement simple numeric and non-numeric algorithms. Explain the necessary characteristics of a recursive solution, the trade offs between recursive and iterative solutions of the same algorithm. Write a simple recursive definition. Explain the concept of "divide and conquer" as a general problem solving technique.
  8. Explain the prefix, infix, and postfix representations of arithmetic expressions, and convert one form to another.
  9. Describe the operation of several sorting advanced algorithms (including QuickSort and MergeSort) and choose the appropriate one for a given application.
  10. Describe the performance of various sorting algorithms.

Required Course Textbook

Introduction to Algorithms, Third Edition, Cormen, Leiserson, Rivest, Stein, McGraw-Hill 2009

Course Materials and Resources

Flexible Lab Hours

I will be assigning weekly exercises for you to complete during the semester from the sample problems in your textbook. These exercises will help you learn the course material, review important programming concepts, and prepare for your programming projects and exams. Arranged hours are class time and all students are expected to meet this number of hours per week to fulfill the requirements of this course. These exercises are collected but not annotated and returned. During the first two weeks of class, we will discuss the proceedures used to complete and track your required lab time (4 hours and 5 minutes per week.) Ten percent of your grade comes the completion of these exercises. Please let me know if you have any questions regarding the online lab portion of the class.


You are responsible for the assigned reading, the self-scheduled lab hours, and what is discussed in each class meeting, including announcements, regardless of your attendance. If you are unable to make it to class, you should arrange to have someone else in the class take notes for you. Keeping up with the assigned reading and the course lectures is important for sucessful completion of the course programming assignments and exams.

During class I expect that you will take notes. I recomend paper notes. Use of laptops during class is discouraged. If you use a laptop or other screen during class, please sit towards the back to minimize disruption, and only use the device for note taking, and not for unrelated activities or for working on programming assignments during class time.

Please do not contact me via email regarding the content of a class meeting that you missed.

This course requires active participation each day of class so it is important for you to attend every class session, arrive on time, and come prepared. Your participation not only enhances your own learning, it benefits other students in the class.

You are responsible for knowing how to calculate your grade (given your raw scores) in this class. Here is a document that describes how to calculate a weighted average. (.pdf) I am also happy to review the arithmetic needed to do this if you come to see me during any of my lab or office hours.


You may obtain a letter grade (A, B, C, D, or F), or you may choose instead to take the class for pass/no-pass. The latter option means that your grade for this course will be pass if you score at least 70% overall and no-pass if you don't. Please declare the option you want on your student information sheet. You may change your grading option until the official college deadline. If you do not specify a preference, you will recieve a letter grade. Those who earn 90.0% or more of the possible points will get an A, 80.0% B, 70.0% C, 60.0% D, and lower F.

Homework and Programming Assignments

50% of your grade will be based on your homework. There will be eight regular assignments and one extra credit assignment. There is no final project.

Programming assignments are due at 7:00pm on the specified date. Late assignments will not be accepted. If your work is not complete by the due date, turn in what you have done for partial credit and proceed to the next assignment. Start small and at least get part of the program working and build from there; this way when you turn in the assignment, it will accomplish part of the goal. A program that does part of the assignment is better than a lot of code that does nothing. The programs will be evaluated primarily for working correctly. Programs that can't run the test data, or that give incomplete or incorrect answers or that "crash" or "hang" will receive significant point deductions. Programs that don't compile will receive a maximum score of 60%

Flexible Late Days

You have two "flexible late days" that can be spent on any of the assignments except for the first assignment. You may allocate them any way that you wish. A "day" can be redeemed to submit an assignment after the deadline (between 1 minute to 24 hours late) and still receive full credit. You may use both days for one project, or split them up and use them on up to two assignments. I will collect your assignment normally, but will "replace" your submission with an updated version. To redeem a "flex late day", please notify me via email. This initial email notifying me that you are going to use flex late day(s) is due no later than 15 minutes before the due date and time of the assignment. In the email, include your full name, Pengo login, class, and assignment (by number) that you are requesting the flex late day use for. Do not tell me how many flex late days you will be using in the email. A second email is due within 24 (or 48) hours of the original deadline—when you are ready for me to collect the revised version of your assignment. Using a flex late day may subject your program to a delay before the program is graded and returned. Flex late days that aren't used during the semester can be redeemed for six (assignment) points of extra credit at the end of the semester. Failure to follow the directions for flex late days may result in their expenditure without any benefit.

How To "Submit" Programming Assignments:

Every assignment has an official directory name. At some time after the assignment is due, it will be automatically collected (copied) from your home directory on pengo. Filenames must be exact and are case sensitive. If you need a pengo account or forget your password, I can help you via email or office hours. Please contact me if you have any questions about this process.

Cheating, Plagiarism and Collusion

Review this page on Academic Integrity


There will be a mid-term and a final exam. Exams must be taken when given except by prior arrangement with me. Exams will be closed book. Exams will be 40% of your final grade. The midterm and final exam will carry approximately the same weight.

Consulting with me

If you need some extra help, or need to consult with me regarding any course-related matter, please feel welcome to contact me during my scheduled lab or office hours. My lab and office hours provide times that are specifically reserved for helping you outside of the lecture. Make an appointment if you cannot come during my scheduled lab or office hours. My lab and office hours are shown on my web page.

This is a difficult course. Almost everybody is going to get “stuck” at some point in the semester. When this happens please don't hesitate to get some help. A little bit of help can save you hours of pounding your head against the wall. I have regular office hours and lab hours or you can send me email or call me.

Getting help

Here's a link to instructor and tutor hours.

Seven Keys for Academic Success

  1. Study With and Get to Know Other Students
  2. Use a Study Schedule and Time Management Strategies
  3. Come to Every Class Session
  4. Communicate with Your Instructor
  5. Expect to Use Textbooks and Readings
  6. Set Academic Goals
  7. Support Services Are Here for You - Free!

Find out more about the seven keys!

Student Equity

Here's a link to the Cabrillo Office of Student Equity website.


For help with financial aid, counseling, or general information, please visit the Veterans Information Center (Room 914.)

AB540, DACA, and Undocumented Students

Cabrillo College is a "sanctuary campus."
The Dream Resource coordinator can help clarify any questions you may have as well as provide information about college, resources, clubs, and scholarships. Please contact Adela Naranjo-Bernabe, 477-3379, (Aptos Room 104; Watsonville Room A123.)

Campus Resources

Please come see me if you have questions about the resources and support that is available on campus.
Some of the resources on Campus (one page; .pdf)


Students needing accommodations should contact the instructor as soon as possible. As required by the Americans with Disabilities Act (ADA), accommodations are provided to insure equal opportunity for students with verified disabilities. If you need assistance with an accommodation, please contact Disabled Student Services, Room 810, 479-6379, or Learning Skills Program, Room 1073, 479-6220.