Syllabus


Objectives and Expectations

The goal of this course is to become proficient in using and analyzing basic data structures and algorithms. By the end of the course, you should be able to do the following:

  • Develop programs in a non-Java language (in this case, C) utilizing common data structures, modular/reusable patterns, memory management strategies, and error handling.
  • Describe, explain, and use an abstract container framework that includes stacks, queues, lists, sets, and maps.
  • Implement the containers in the container framework using contiguous or linked data structures. Contiguous data structures include arrays and hash tables, and linked data structures include linked lists and binary trees.
  • Implement searching algorithms, including linear search and binary search.
  • Implement a variety of sorting algorithms, including insertion sort, selection sort, merge sort, quick sort, and heap sort.
  • Read and write recursive algorithms, analyze recursion, and remove recursion when appropriate.
  • Implement tree traversal algorithms as well as binary search tree insertion, deletion, and search algorithms.
  • Implement hash tables using chaining or open addressing for collision resolution.
  • State the asymptotic running times of the algorithms and data structure operations studied in this course, and explain the practical behavior of algorithms with various asymptotic running times.

Course Textbooks

Open Data Structures
Pat Morin

We will be using an open-source textbook this semester. The compiled text itself as well as all of its source materials (in LaTeX and various other languages) are all available on the textbook website. We will be using the pseudocode version. The textbook is required for the course, so I highly recommend obtaining a printed copy. You have several options for doing so:

  • We have arranged with the campus bookstore to sell a "coursepack" consisting of a coil-bound, landscape printout of the pdf (four PDF pages per 8.5" x 11" sheet). The cost should be $17.39. This is the recommended option for on-campus convenience.
  • We have uploaded the PDF to a web-based printing service, and you may order a 6" x 9" paperbound copy from the product page if you prefer a more traditionally-bound book. The cost is $5.61 plus shipping. I recommend ordering early because it takes 2-3 weeks to print and ship your copy.
  • You may print it yourself using your own equipment or a standard print center such as FedEx. This could end up being more expensive that the other two options, but if you already have an established account at such a business, you may find it more convenient.
Textbook Cover

The C Programming Language
Brian Kernighan and Dennis Ritchie

This is the classic "K&R C" book, first published in 1978. It is often regarded as something of a sacred text amongst hardcore C programmers. This book is not required for this course, but it is highly recommended. It is a simple, clean, and useful explanation of the C language with many excellent examples. It is also an important piece of computer science history that has held up extremely well; it remains surprisingly relevant nearly four decades later.

This book is available on Safari Books Online through the JMU library subscription.

Textbook Cover

We will also be using excerpts from other resources as needed, such as the Mathematics for Computer Science online textbook by Eric Lehman, F. Thomson Leighton, and Albert R. Meyer.

Grading Criteria

You are responsible for all material discussed in lecture and discussion section and posted on the class web page, including announcements, deadlines, policies, etc.

Your final course grade will be determined according to the following percentages:

Quizzes and Homeworks 30%
Programming Projects 25%
Midterm Exams 30%
Final Exam 15%

Final course letter grades may be curved if necessary at the end of the semester, based on each student's overall performance for all coursework.

If you believe I have made an error while grading your work or calculating your final score, please bring it to my attention after class or during office hours. If I determine that there has been a simple mistake, I will fix it immediately and no formal request is necessary.

If you believe an exam question or assignment has been graded unfairly, you must submit a verbal or written formal request for a regrade. Such requests must be submitted within one week of when the assignment in question is returned to you. Any coursework submitted for reconsideration may be regraded in its entirety, which could result in a lower score if warranted.

Completing the programming assignments is an essential part of the course. Therefore, I reserve the right to fail any student who does not make a good-faith attempt on all course projects, regardless of the student's performance or scores on the other coursework.

Instructor Contact Info

Please post generic questions to Piazza, where other students may answer and/or benefit from my answers. My email is lam2mo at the standard domain. My office is in ISAT 227, and my office hours are posted on the main course page.

I am also sometimes available outside office hours by appointment; if you wish to make an appointment, please check the public calendar on my home page to find a several candidate times that work for you and send me an email.

Course Policies

Important announcements will be made in class and/or on the class website. Please make it a habit to check the web page daily.

Although every effort has been made to be complete and accurate, unforeseen circumstances arising during the semester could require the adjustment of any material given here. Consequently, given due notice to students, I reserve the right to change any information on this syllabus or in other course materials.

You are permitted to use course materials for your own personal use only. Course materials may not be distributed publicly or provided to others (excepting other students in the course), in any way or format unless explicitly allowed.

Attendance and Participation

Attendance is not mandatory, and I will not give grades purely based on attendance. I view my students' time as valuable, and my goal as a teacher is to make class attendance and participation well worth the time investment for you. I strongly encourage you to attend every class session and participate fully in order to derive the maximum benefit of this course. If you believe that there is something I could change about the way I am handling the course in order to improve its effectiveness for you, please let me know via email or office hours.

You should also be aware that I do occasionally give graded quizzes or graded group work assignments during class periods. In some cases, I will notify you in advance about these quizzes or assignments, but I do reserve the right to administer them unannounced at my discretion.

Please silence your cell phone while class is in session. If you have a laptop or tablet, you are encouraged to bring it to class and use it to work along with programming examples and exercises. Mute the volume to avoid unintended interruptions, and do not use any electronic devices for activities that may distract other students. Repeated violations of this policy may result in disciplinary action or a grade penalty in the course.

I strongly encourage you to check the main website and the Piazza web forum regularly for important announcements (usually regarding programming projects). You may also use the Piazza forum to ask general questions of interest to the class as a whole (e.g., administrative issues or project clarification questions) as well as to offer each other general advice on class assignments. However, do not post any information that would violate the university academic integrity policy. If you are unsure about this, please email me for approval before you post.

Programming Projects

Projects must be submitted electronically following the instructions given in class and on the website. Projects may not be submitted by any other means (e.g., do not email your projects to me unless I request that). It is your responsibility to test your program and verify that it works properly before submitting it.

All projects are due at 23:59 (11:59pm) on the day indicated on the project assignment unless noted otherwise.

Projects may be submitted up to 72 hours late for a 10% penalty per 24-hour period. For example, a submission that would have earned 90 points in an on-time submission will earn 90 x 0.90 = 81 points if submitted up to 24 hours late, or 90 x 0.80 = 72 points if submitted up to 48 hours late. If you make multiple submissions, I will typically grade the latest submission. If you wish me to grade a different submission, you must indicate this before the 72-hour late period is over.

Regardless of the above policy, I reserve the right to refuse to grade any projects submitted after the beginning of the second class period following the project deadline, because I may discuss the solution in class.

Project extensions will not necessarily be granted due to server congestion, system problems, network problems, power outages, etc., so do not wait to submit a project until the night it is due. No consideration in grading will be made for errors made in transferring files or submitting the wrong version of your project. Having a working, non-submitted version will not count; only submitted code will be be counted.

You will be responsible for developing your own techniques for testing your projects before submitting it. I will grade your projects based on test cases not provided to you in advance. Because grading may be done automatically, you must follow the project specification exactly.

Your code will be graded on a combination of correctness, completeness, documentation, and code style.

Any "hard coding" in a project assignment will result in a score of zero for that project, and is considered a bad-faith effort. Hard coding refers to attempting to make a program appear as if it works correctly, when in fact it does not. One example of hard coding would be printing the desired output instead of computing it. If you have any questions as to what constitutes hard coding for a particular assignment, be sure to ask ahead of time.

Adding and Dropping the Course

Students are responsible for adding and dropping courses. Please consult the appropriate academic calendar for the exact deadlines. I will not give "WP" or "WF" grades to students requesting a drop after the deadline except in extraordinary circumstances.

Academic Honesty

You are expected to comply with the JMU Honor Code as stated in the Student Handbook and available from the Honor Council website on all assignments, projects, and exams.

Consulting with other students about problems and solutions is not necessarily a violation of the honor code, depending on the particular assignment. All final work turned in for an assignment must be your own unless it is a group project. In particular, you may not share source or binary code on programming assignments unless the project specification explicitly allows it. If you are in doubt about whether something is an honor code violation, please contact me immediately.

If I find evidence of a violation of the honor code, I will bring the matter to the attention of the involved individuals via email and request a face-to-face meeting. As per section IV of the honor code, first time student offenders may agree that a violation has occurred and accept an appropriate penalty by submitting an "Informal Resolution Agreement Form" to the honor council. If the student is not a first-time offender or if there is disagreement about the violation or penalty, the matter will be refered to the honor council under section V of the honor code.

Disability Accommodations

If you need an accommodation based on the impact of a disability, you must contact the Office of Disability Services if you have not previously done so. Disability Services will provide you with an Access Plan letter that will verify your need for services and make recommendations for accommodations to be used in the classroom. Once you have shown me this letter, we will sit down and review the course requirements, your disability characteristics, and your requested accommodations to develop an individualized plan appropriate for this course. I will not make any accommodations without the appropriate documentation, as I am not qualified to diagnose disabilities.

Excused Absences

Besides the policies in this syllabus, the University's policies apply during the semester. Various policies that may be relevant appear in the Undergraduate Catalog.

Excused absences will be granted at my discretion and only with appropriate documentation. Please contact me as soon as possible if you wish to request an excused absence.

Missing an exam for reasons such as illness, religious observance, participation in required university activities, or family or personal emergency (such as a serious automobile accident or the funeral of a close relative) all are circumstances that may qualify as an excused absence. However, you must provide documentation that the absence qualifies as excused. I will arrange a makeup exam or substitute assignment at my discretion.

The policies for excused absences do not apply to in-class activities (which cannot be made up) or project assignments. Projects will be assigned with sufficient time to be completed by students who have a reasonable understanding of the necessary material and begin promptly. In cases of extremely serious documented illness of lengthy duration or other protracted, severe emergency situations, I may consider extensions on project assignments depending upon the specific circumstances. Please contact me as early as possible if you believe you will need such an extension.

Inclement Weather

This class will operate in accord with JMU's official cancellation policy.

Catalog Description

Students learn to implement and analyze elementary data structures and the basic complexity classes of algorithms that use strategies such as greedy algorithms, divide-and-conquer algorithms and backtracking algorithms. This analysis is especially applied to problems in searching, sorting and parsing.

Prerequisites: Grades of "C-" or better in CS/MATH 227, MATH 231 or equivalent and either CS 159 or CS 239.

Sections: 0001 and 0002
Instructor: Dr. Mike Lam
Credits: 3