Repository for my DSA Analysis and Design Course
This repository contains the projects for the CS 300 Data Structures and Algorithms course at ABCU. The focus is on applying non-coding development methodologies for outlining algorithmic design, evaluating complex data structures using advanced algorithms, and developing code to solve basic programming problems.
The academic advisors in the Computer Science department at ABCU need a program that can:
- Print a list of all the Computer Science courses in alphanumeric order.
- For a given course, print out its title and prerequisites.
I tackled this problem by exploring three data structures: vector, hash table, and tree. Each was designed to perform the required functions with pseudocode. The Big O analysis was performed to evaluate the runtime and memory of these structures.
Understanding the best data structure to use for efficiency was a challenge. This was overcome by performing a comprehensive runtime analysis and evaluating the advantages and disadvantages of each structure.
This project has expanded my approach to designing software and developing programs by considering the underlying data structures. It has also evolved the way I write programs that are maintainable, readable, and adaptable.
Building upon Project One, the goal here was to write the actual code for the application to assist academic advisors.
Using C++, I implemented the recommended data structure from Project One and designed code to:
- Read the course data file.
- Load data into the structure.
- Print an alphanumeric list of courses.
- Print the course title and prerequisites for any individual course.
Ensuring that the code adhered to industry standard best practices required careful attention to error handling, in-line comments, and naming conventions.
This project helped in understanding how to apply algorithms and data structures in real coding scenarios, making the code more robust and maintainable.
In Project One, the problem was to design a program (using pseudocode) that could efficiently handle course information, and in Project Two, it was to implement the designed pseudocode in C++.
The approach involved selecting the appropriate data structures that would optimize performance and memory usage. Understanding data structures was crucial as it helped in creating a program that could handle large amounts of data efficiently.
Roadblocks were overcome by careful analysis, seeking additional resources when needed, and iterative testing of different solutions to find the most suitable one. There's always a solution, it's just a matter of finding it.
How has your work on this project expanded your approach to designing software and developing programs?
The work on these projects taught the importance of analyzing the problem first, choosing the right data structures, and considering the performance and maintainability of the code from the very beginning.
How has your work on this project evolved the way you write programs that are maintainable, readable, and adaptable?
These projects emphasized the importance of writing clean code with clear comments, following naming conventions, and considering scalability and maintainability from the outset.
These projects have been instrumental in understanding and applying data structures and algorithms, enhancing the ability to write efficient, maintainable, and adaptable code.