Data Structures and Algorithms

Data Structures and Algorithms is an intermediate-level computer science course suitable for students who already have experience programming in C/C++. In this course, students will learn about and be able to implement a wide variety of data structures and algorithms as well as explore their space/time complexities and be able to understand when each are used in real-world contexts.

This course consists of 16 sessions and students are encouraged to take each session in consecutive order. Students will be learning a wide array of data structures and algorithms, including linked lists, AVL trees, bubble sort, and more.


Registration is currently closed as maximum capacity has been reached.

Notice: I am retired from teaching and mentoring, and this course is no longer active.

General Information

Full Course Overview

Session 1: Introduction

Session 2: C++ Structures

Session 3: Linked Lists

Session 4: Queues

Session 5: Stacks

Session 6: Binary Search Trees

Session 7: B-Trees

Session 8: AVL Trees

Session 9: Hash Tables

Session 10: Bubble Sort

Session 11: Selection Sort

Session 12: Insertion Sort

Session 13: Merge Sort

Session 14: Quicksort

Session 15: Graphs I

Session 16: Graphs II

Optional Practice Assignments

Implementation Practice: Data Structures

After each session covering a data structure, create an implementation of the discussed data structure. Your implementation may store any type of data you’d like, but it is recommended that you store integers.

Run experiments that measure the time complexities of each of the four basic operations: access, search, insertion, and deletion. Run multiple trials and with varying inputs to determine whether each operation runs in constant, linear, logarithmic, or other time.

Implementation Practice: Sorting Algorithms

After each session covering a sorting algorithm, create an implementation of the discussed algorithm. Your implementation may sort any type of data you’d like, but it is recommended that you sort integers.

Run experiments that measure the space/time taken by each algorithm. As you implement more sorting algorithms, compare their time complexities.

Optional Projects

Six Degrees of Separation

Model a real-life social network using a graph. Then, using any shortest path algorithm you’d like, find the shortest distance from any person A to any person B. Empirically prove the six degrees of separation.

More information about the six degrees of separation: Wikipedia / YouTube