COMP 272 (Data Structures and Algorithms) is a three-credit computer science course that builds on the concepts introduced in COMP 268 (Introduction to Computer Programming in Java) or COMP 206 (Introduction to Computer Programming in C++) and shows how to use data structures as tools to design computer programs that will cope with the complexity of actual applications. As prerequisites, students should have familiarity with the fundamentals of Java and/or C++ and should have either completed COMP 268 or COMP 206. If students feel that they have sufficient programming skills in Java, C, or C++ then they may be admitted upon approval from the course professor. If you want to learn more about Introduction to Computer Programming in Java, read my COMP 268 Course Exam article!
Students will be required to download an Integrated Development Environment (IDE) for this course. My recommendation is IntelliJ, as it is free, it highlights errors, auto completes some text, and it has an integrated debugger that is useful for solving programming errors and can be useful for the required written reflections.
Data Structures and Algorithms is comprised of twelve units, three assignments weighing twenty percent (students must score fifty percent in each assessment to pass the course), and one online final exam worth forty percent. The twelve units within this course cover topics such as array-based lists, linked lists, skip lists, hash tables, stacks, queues, recursion, scapegoat trees, red-black trees, heaps, binary trees, sorting algorithms (merge-sort and quick-sort), and graphs. For each assignment, students will have to apply, program, test, debug, and analyze the inputs and outputs of their code in Java by way of written reflections in Word.
Students are required to add inline comments in their code and prepare a separate document to reflect on how the essential methods, classes, parameters, or entire programs were designed and handled while implementing those algorithms for each programming question in all three assignments. Alongside your code, in a Word document, the reflections must include two or more of the provided prompts. The prompts include significant types of errors or warnings that you faced when coding programs, whether you were able to correct these errors or warnings quickly, which debugging strategies you used, which commenting strategies you used, which testing strategies you used, which code optimization techniques you followed, what resources you referred to, or just other comments.
Assignment one covers the basic methods of stacks and queues, such as pop(), push(), add(), remove(), and size() and requires students to answer question one, question two, and any other two questions from questions three to six (for a total of four programming questions and four reflections). I found this assignment to be relatively short and simple, though I have prior experience with stacks from the card game Magic The Gathering. All questions in assignment one must be fully coded programs.
Assignment two covers binary trees and the traversal of trees, which included the methods preorderNext(), postorderNext(), and inorderNext() and requires students to answer all the provided questions (for a total of five questions and five reflections). Trees are about ways to organize your data to be stored and retrieved efficiently. This assignment took longer to complete as I had not encountered this idea of a tree prior to this assignment. All questions in assignment two must also be fully coded programs.
Assignment three covers merge-sorting, quick-sorting, doing tree traversals by hand on a provided graph, and covers different kinds of binary trees, including Adelson Velskii and Landis (AVL) trees, and red-black trees. Students must complete all the provided questions (eight questions and roughly four reflections). This assignment was definitely the longest and most difficult, though thankfully not all of the questions in this assignment had to be coded. Half of the questions were coding questions and the other half could be illustrated or explained in a Word document. Since only half of the questions needed to be fully coded programs, only half needed reflections.
The final exam is online, closed-book, and students are allowed three hours to write it. There are four parts to this exam, which include twenty multiple choice questions worth two marks each (forty percent), ten fill-in-the-blank questions worth three and a half marks each (thirty-five percent), three short answer questions worth five marks each (fifteen percent), and one programming question worth ten marks each (ten percent). For students who are concerned with the final exam, there is a sample final exam that is provided on the course homepage.
From personally taking this course I found it to be less time consuming than COMP 268, though it still took awhile to complete. One incredibly annoying aspect of this course was the marking times for the assignments. Each of my three assignments took roughly a month to get marked, so do not expect to have your assignments marked before you write your final exam if you procrastinate until the last month of your course contract! Thankfully, the questions in the three assignments were generally easy to understand or easy enough to look up. The first two assignments were definitely the easier assignments, with the third assignment being the most difficult and demanding. If you enroll into this course and find yourself stuck, I recommend you look in the COMP 272 General Discussion Forum to see if someone else also had the same issue. Many students ask really helpful questions and provide a lot of great resources to others who are struggling. If another student does not answer your question, the professor usually will. This course was a degree requirement of mine but unless you are really interested in advancing your knowledge of data structures then I would not recommend it.