Data structures & algorithms
Student Advising and Course Planning Application
I developed a C++ command-line application that imports academic course data, validates prerequisite relationships, prints a sorted schedule, and retrieves individual course details. The project compares vectors, hash tables, and binary search trees to select an efficient structure for an advising workflow.
- C++
- Binary Search Trees
- Hash Tables
- Vectors
- Algorithms
- Runtime Analysis

Organizing an academic pathway
A binary search tree connects efficient course lookup with the ordered output advisors need when reviewing a complete program.
Overview
Turning course records into practical advising information
The application was designed for academic advisors who need to review the curriculum in order and quickly answer questions about a specific course. It transforms a structured data file into a searchable model of courses and their prerequisite relationships.
Design goal
Fast lookup with naturally sorted output
The central design decision was selecting a structure that could retrieve course details efficiently while also producing an ordered schedule without a separate sorting pass.
Application capabilities
A focused workflow for academic advisors
Load course data
Imports course numbers, titles, and prerequisite relationships from a structured input file.
Print a sorted schedule
Traverses the selected data structure to display the full computer science curriculum in course-number order.
Find course details
Searches by course number and displays the matching title and prerequisite information.
Validate relationships
Checks course records and prerequisite references so incomplete or invalid data can be handled safely.
Data structure analysis
Comparing storage, search, and ordering trade-offs
Vector
O(n)Strength
Simple contiguous storage makes sequential iteration straightforward and efficient.
Trade-off
Finding a course requires a linear scan, and maintaining sorted order adds extra work.
Hash table
O(1) averageStrength
Course numbers provide direct keys for fast average-case searches, insertions, and deletions.
Trade-off
Entries are not naturally ordered, and collisions can reduce lookup performance.
Binary search tree
O(log n) balancedStrength
An in-order traversal produces a sorted schedule while preserving efficient searches.
Trade-off
An unbalanced tree can degrade to O(n), so tree shape affects worst-case performance.
Architecture decision
Why a binary search tree fit the advising workflow
A balanced binary search tree supports searches, insertions, and deletions in O(log n) time while an in-order traversal prints every course in O(n) sorted order. That combination directly supports the advisors' two primary needs: finding a course quickly and reviewing the complete curriculum in sequence.
Development process
From pseudocode and analysis to a tested C++ application
Defined a course record containing a number, title, and prerequisite list
Designed search pseudocode for vectors, hash tables, and binary search trees
Analyzed the runtime and memory trade-offs of each structure
Selected a binary search tree to support ordered output and efficient lookup
Parsed and validated course data from the input file
Tested loading, schedule printing, course lookup, and prerequisite output
Application gallery
Loading, browsing, and searching course data
The command-line interface keeps each advising task clear and provides direct feedback for schedule and prerequisite requests.

Command-line menu
A focused menu provides access to data loading, schedule output, individual course lookup, and exit controls.

Sorted course schedule
The application prints the full computer science schedule in ascending course-number order.

Course and prerequisite lookup
A course-number search returns the course title and its required prerequisite.
Validation
Protecting the integrity of the course model
- Reject input rows that do not contain a course number and title
- Preserve every prerequisite associated with a course
- Report missing course searches clearly
- Confirm that sorted output remains correct after data loading
Key lesson
Data structures should follow the user's access patterns
The fastest isolated lookup was not the only requirement. Evaluating how advisors search, browse, and print course data led to a more balanced architecture decision than choosing a structure from Big O notation alone.
Project outcome
A practical advising tool grounded in algorithm analysis
The completed application demonstrates my ability to translate requirements into data models, compare algorithmic trade-offs, validate imported information, and implement an organized C++ solution that supports real user tasks.