This course explores data structures, algorithms for manipulating them, and the practical problems of implementing those structures in real programming languages and environments. Heavy emphasis is placed upon the analysis of algorithms to characterize their worst and average case requirements for running time and memory.
Laboratory Activities & Quizzes: 40%
Midterm Exam: 30%
Final Exam: 30%
The course is divided into three parts. Each part contains multiple modules, including some assignments, and an exam. Each module consists of a series of activities. These include reading, taking self-assessment quizzes & labs, and doing assignments.
Not every assigned activity requires you to submit something for grading. Nonetheless, you are expected to complete all of them.
If an activity is not marked with its own due date, then it is considered to be due at the end of the date range given for that module.
Expand the student’s toolbox of basic techniques for manipulating data at both the conceptual and concrete level.
To explore a broad selection of standard practices and techniques used in program design of conceptual level
To begin a career-long practice of accumulating useful, reusable code units on the concrete level
In addition to the readings at the course web site, listed at the top of this document, the textbook for this course is:
Weiss, Data Structures & Algorithm Analysis in C++, 4e, 2013, Pearson PH, 013284737X 978-0132847377
Review material from Earlier Courses:
CS 111 Computer Programming - https://sites.google.com/g.batstate-u.edu.ph/cs111/home
CS 121 Advanced Computer Programming - https://sites.google.com/g.batstate-u.edu.ph/cs121/home
The C++ Language
cplusplus.com has an extensive set of tutorials and reference material on C++
cppreference.com is also an excellent reference site.
The C++ FAQ (Frequently Asked Questions) has a wealth of information about object-oriented programming in general and about C++ specifically.
The already-mentioned cplusplus.com describes the STL and also the portions of the std library that SiliconGraphics does not (e.g., iostream, string).
Also very useful is this C++ reference.
In particular, take note od
An excellent summary sheet for std:: generic algorithm
My own reference sheets for containers are not as complete and up-to-date, but they do include complexity info as part of the summary.
Algorithm Animations
A number of the more important or interesting algorithms covered in this course are available as animations that you can run to see how the data is being manipulated.
A compiler translates your programming language source code into an executable. A compiler is not a program that allows you to create, edit, run, test, & debug your code. Code::Blocks, Eclipse, XCode, etc. are not compilers – they are IDEs (see below).
An IDE is a program that “surrounds” a compiler and provides support for a variety of programming activities, including writing code, compiling it, correcting errors, running and testing the resulting program, and debugging the program.
You can find my recommendations for compilers and IDEs to install on your own PC below.
boost is a collection of peer-reviewed C++ libraries that explores avenues for possible future standardization. Many boost libraries have already made their way into the C++ std library. Some are under consideration. Some others may never make it into the standard but are just plain useful.
To install boost, you can use this starting guide. The TLDR version is:
If you are running C++ in an Ubuntu-based Linux, including the Windows (WSL) bash, install via the commands
apt-get update
apt-get install libboost-all-dev
If you are running C++ in CygWin, run the CygWin setup program, search for “boost”, and select the package libboost-devel.
If you are running MacOS, you will probably need to follow the instructions in the getting started guide for Linux variants.
For this course, you only need the “header-only” components. That means that installation can be as simple as
Download the library.
Unpack it, and cd into the unpacked directory.
Copy the boost/ directory into one of the directories in your C++ compiler’s “include path”, e.g.
cp -rf boost/ /usr/local/include/
so that the directory boost/ is copied as /usr/local/include/boost.
There’s a lot of Mac-related pages giving very complicated procedures for doing this. I suggest you try this simple procedure first.
The grading system adopted by this course is as follows:
Excellent 1.00 98 - 100
Superior 1.25 94 - 97
Very Good 1.5 90 - 93
Good 1.75 88 - 89
Meritorious 2.00 85 - 87
Very Satisfactory 2.25 83 - 84
Satisfactory 2.50 80 - 82
Fairly Satisfactory 2.75 78 - 79
Passing 3.00 75 - 77
Failure 5.00 Below 70
Incomplete INC
*Students who got a computed grade of 70-74 will be given an appropriate remedial activity in which the final grade should be either passing (3.0) or failure (5.0).
Prompt and regular attendance of students is required. Total unexcused absences shall not exceed ten (10) percent of the maximum number of hours required per course per semester (or per summer term). A semester has 18 weeks.
Students who failed to take the exam during the schedule date can be given a special exam provided he/she has valid reason. If it is health reason, he/she should provide the faculty with the medical certificate signed by the attending Physician. Other reasons shall be assessed first by the faculty to determine its validity.
Academic dishonesty includes acts such as cheating during examinations or plagiarism in connection with any academic work. Such acts are considered major offenses and will be dealt with according to the University’s Student Norms of Conduct.
Dropping must be made official by accomplishing a dropping form and submitting it at the Registrar’s Office before the midterm examination. Students who officially drop out of class shall be marked “Dropped” whether he took the preliminary examination or not and irrespective of their preliminary grades.
A student who unofficially drops out of class shall be given a mark of “5.0” by the instructor.
Consultation For any consultation regarding the class, a group chat will be created to accommodate the concerns of the students. In addition, students may reach me through email.