↑ COP3530 - Data Structures

Course & Module Outcomes

Course Outcomes

By the end of this course, students will be able to:

Outcomes Alignment Map

Module / OutcomeCO1CO2CO3CO4
Getting Started: JavaScript and JSFiddle Environment
Configure Jsfiddle Development
Recall Core Roles
Construct Basic Javascript
Differentiate Purpose Each
Apply Algorithmic Thinking
Lists and Arrays: Structure and Introduction to Big O Notation
Distinguish Between Arrays
Describe Core Data
Classify Time Complexity
Evaluate Efficiency Trade-offs
Lists and Arrays: Algorithms and Operations
Implement Insertion Deletion
Differentiate Between Linear
Analyze Time Space
Select Most Efficient
Construct Traversal Solutions
The Stack: Structure and Use Cases
Explain Last-in First-out
Construct Fully Functioning
Analyze Time Space
Apply Stack-based Algorithms
Identify Real-world Software
The Queue: Structure and Use Cases
Define Fifo Principle
Implement Queue Using
Compare Time Space
Differentiate Between Queue
Select Appropriate Data
Recursion: Concepts and Implementation
Distinguish Between Base
Implement Recursive Solutions
Trace Growth Resolution
Evaluate Whether Given
Identify Performance Trade-offs
Computational Complexity: Deep Dive into Analysis
Differentiate Between Big
Derive Best-case Worst-case
Classify Common Algorithm
Evaluate Algorithm Selection
Justify Choice Asymptotic
Sorting Algorithms: Comparison and Implementation
Implement Bubble Sort
Analyze Best-case Average-case
Differentiate Between Sorting
Evaluate Select Most
Hash Compression: Concepts and Techniques
Define Hash Compression
Apply Modular Arithmetic
Analyze Compression Technique
Evaluate Trade-offs Among
Hash Tables: Structure and Collision Resolution
Explain Hash Function
Compare Chaining Open
Evaluate Time Complexity
Construct Functioning Hash
Hash Algorithms and Applications: Password Hashing and Beyond
Distinguish Between Hashing
Explain Why Dedicated
Evaluate Common Attack
Apply Hash-based Integrity
Design Secure Password
Binary Trees: Structure, Traversal, and Operations
Identify Structural Components
Trace In-order Pre-order
Apply Bst Insertion
Compare Best-case Worst-case
Construct Functioning Javascript
Advanced Tree Structures: AVL Trees, Heaps, and Tries
Explain Why Standard
Trace Avl Tree
Trace Heap Insert
Construct Trie Set
Evaluate Time Complexity
Graphs: Structure, Representation, and Traversal
Distinguish Between Directed
Compare Adjacency Matrix
Trace Step-by-step Traversal
Construct Graph Class
Identify Practical Applications
Applied Data Structures: Blockchain, Digital Currency, and Beyond
Explain Linked Lists
Compare Adjacency List
Trace Bfs Dfs
Evaluate Structural Design
Design Multi-structure Solution

Module Topics & Outcomes

Module 1: 1. Getting Started: JavaScript and JSFiddle Environment

Topics

Introduction to JavaScript

An overview of the JavaScript programming language, its role in software development, and why it is used in this course for data structure implementation.

The JSFiddle Development Environment

A guided introduction to the JSFiddle online coding environment, including how to navigate its interface and configure it for writing and testing JavaScript code.

Writing and Running Your First Program

Hands-on practice writing and executing basic JavaScript programs within JSFiddle, establishing familiarity with the code-run-observe workflow.

Foundational Programming Strategies

A review of core programming concepts and problem-solving strategies, such as variables, control flow, and functions, that underpin data structure implementation in JavaScript.

Learning Outcomes

MO1
Configure the JSFiddle development environment and execute JavaScript programs using the code-run-observe workflow
Level: ApplyType: BehavioralCourse mapping: CO3
MO2
Recall the core roles of JavaScript in modern software development and justify its selection as the implementation language for data structures in this course
Level: RememberType: CognitiveCourse mapping: CO2
MO3
Construct basic JavaScript programs that apply foundational programming strategies — including variables, conditionals, loops, and functions — to store and manipulate data
Level: ApplyType: BehavioralCourse mapping: CO3
MO4
Differentiate the purpose of each panel in the JSFiddle interface and explain how its save-and-share functionality supports assignment submission and collaboration
Level: AnalyzeType: CognitiveCourse mapping: CO3
MO5
Apply algorithmic thinking to decompose a simple problem into a step-by-step sequence of instructions prior to writing JavaScript code
Level: ApplyType: CognitiveCourse mapping: CO2

Module 2: 2 - Lists and Arrays: Structure and Introduction to Big O Notation

Topics

Introduction to Lists and Arrays

Introduces lists and arrays as fundamental data structures, covering their definitions, characteristics, and how they are used to store and organize data.

Array Structure and Memory Layout

Explores how arrays are structured in memory, including indexing, fixed sizing, and how elements are stored contiguously to enable efficient access.

List Structure and Dynamic Behavior

Examines how lists differ from arrays in their dynamic nature, covering variable sizing, element management, and the flexibility they offer for data storage.

Core Data Operations on Lists and Arrays

Covers the fundamental operations performed on lists and arrays such as insertion, deletion, access, and search, establishing a basis for evaluating their efficiency.

Introduction to Computational Complexity

Introduces the concept of computational complexity, explaining why measuring the efficiency of algorithms and data operations matters as input sizes grow.

Big O Notation Fundamentals

Explains Big O notation as a standardized way to express algorithmic efficiency, covering common complexity classes such as O(1), O(n), and O(n²) with clear examples.

Applying Big O to List and Array Operations

Applies Big O notation to the core operations of lists and arrays, enabling students to reason about and compare the relative efficiency of different data structure choices.

Learning Outcomes

MO1
Distinguish between arrays and lists by comparing their memory layout, sizing behavior, and structural characteristics
Level: AnalyzeType: CognitiveCourse mapping: CO1
MO2
Describe the core data operations — access, search, insertion, and deletion — as performed on lists and arrays, including how operation cost varies by position
Level: RememberType: CognitiveCourse mapping: CO1
MO3
Classify the time complexity of list and array operations using Big O notation, identifying O(1), O(n), and O(n²) complexity classes with appropriate examples
Level: ApplyType: CognitiveCourse mapping: CO4
MO4
Evaluate the efficiency trade-offs between list and array operations by applying Big O analysis to justify data structure choices for a given use case
Level: EvaluateType: CognitiveCourse mapping: CO2

Module 3: 3- Lists and Arrays: Algorithms and Operations

Topics

Introduction to Lists and Arrays

An overview of lists and arrays as fundamental data structures, including their definitions, characteristics, and how they are represented in JavaScript.

Insertion Operations

Covers the algorithms and techniques for inserting elements into lists and arrays, including insertion at the beginning, end, and arbitrary positions in JavaScript.

Deletion Operations

Explores methods for removing elements from lists and arrays, examining different deletion scenarios and their JavaScript implementations.

Searching Algorithms

Introduces common searching techniques such as linear search and binary search, with hands-on JavaScript implementations applied to lists and arrays.

Traversal Techniques

Examines how to systematically visit and process each element in a list or array, including various traversal patterns implemented in JavaScript.

Time and Space Complexity Analysis

Analyzes the efficiency of list and array operations using Big O notation, comparing the time and space complexity of insertion, deletion, searching, and traversal algorithms.

Learning Outcomes

MO1
Implement insertion, deletion, searching, and traversal operations on arrays using JavaScript built-in methods and manual algorithms
Level: ApplyType: CognitiveCourse mapping: CO3
MO2
Differentiate between linear search and binary search by comparing their requirements, step-by-step procedures, and appropriate use cases
Level: AnalyzeType: CognitiveCourse mapping: CO2
MO3
Analyze the time and space complexity of insertion, deletion, searching, and traversal operations on lists and arrays using Big O notation
Level: AnalyzeType: CognitiveCourse mapping: CO4
MO4
Select the most efficient array operation or traversal technique for a given scenario based on position, data order, and complexity trade-offs
Level: EvaluateType: CognitiveCourse mapping: CO2
MO5
Construct traversal solutions for multi-dimensional arrays using nested loops and higher-order JavaScript methods such as forEach, map, filter, and reduce
Level: CreateType: BehavioralCourse mapping: CO3

Module 4: 4- The Stack: Structure and Use Cases

Topics

Introduction to the Stack Data Structure

An overview of what a stack is and why it is a fundamental data structure in computer science. This topic establishes the conceptual foundation before diving into implementation details.

The LIFO Principle

A focused exploration of the Last In, First Out principle that governs how stacks operate. Students will learn how this ordering rule distinguishes stacks from other data structures.

Internal Implementation of a Stack

An examination of how a stack is structured and managed internally, including the underlying mechanisms that support its core operations. This topic bridges theory and practical construction.

Building a Stack in JavaScript

A hands-on walkthrough of implementing a stack using JavaScript, covering the creation of push, pop, peek, and related methods. Students will write and test working stack code.

Expression Evaluation Using Stacks

An exploration of how stacks are used to parse and evaluate mathematical or logical expressions, such as balancing parentheses or converting infix to postfix notation. Real examples illustrate the practical power of the stack.

Undo Mechanisms and Other Real-World Use Cases

A survey of practical applications where stacks power everyday software features, with undo functionality as a primary example. Students will connect abstract data structure concepts to familiar tools and systems.

Learning Outcomes

MO1
Explain the Last-In, First-Out (LIFO) principle and contrast it with the ordering rules of other data structures such as queues
Level: UnderstandType: CognitiveCourse mapping: CO1
MO2
Construct a fully functioning Stack class in JavaScript that implements push, pop, peek, isEmpty, size, and toString methods
Level: CreateType: BehavioralCourse mapping: CO3
MO3
Analyze the time and space complexity of core stack operations and justify why arrays or linked lists are appropriate underlying data containers
Level: AnalyzeType: CognitiveCourse mapping: CO4
MO4
Apply stack-based algorithms to solve expression evaluation problems, including balancing parentheses and converting infix expressions to postfix notation using the Shunting-Yard Algorithm
Level: ApplyType: BehavioralCourse mapping: CO2
MO5
Identify real-world software features — such as undo mechanisms, browser history navigation, call stacks, and backtracking algorithms — that rely on stack behavior and explain how the LIFO principle enables each use case
Level: AnalyzeType: CognitiveCourse mapping: CO2

Module 5: The Queue: Structure and Use Cases

Topics

Introduction to the Queue Data Structure

This topic establishes what a queue is and where it fits within the broader landscape of data structures. Students are introduced to the queue as an ordered collection with specific rules governing how data enters and exits.

The FIFO Principle

This topic explains the First-In, First-Out principle that defines queue behavior. Students learn how FIFO governs the order of insertion and removal, distinguishing queues from other data structures.

Queue Operations

This topic covers the core operations performed on a queue, including enqueue, dequeue, peek, and isEmpty. Students examine the mechanics and expected behavior of each operation.

Implementing a Queue

This topic explores the primary approaches to implementing a queue, such as using arrays or linked lists. Students implement queue operations in code and evaluate the trade-offs of each approach.

Real-World Applications of Queues

This topic connects queue concepts to practical use cases such as task scheduling, print spooling, and data buffering. Students analyze how the FIFO principle makes queues suitable for these scenarios.

Queues vs. Stacks: A Comparison

This topic directly compares the queue and stack data structures, highlighting differences in ordering principles, operations, and appropriate use cases. Students develop the ability to select the right structure for a given problem.

Learning Outcomes

MO1
Define the FIFO principle and explain how it governs the enqueue and dequeue operations of a queue abstract data type
Level: RememberType: CognitiveCourse mapping: CO1
MO2
Implement a queue using both an array-based and a linked list-based approach, correctly handling edge cases and core operations in code
Level: ApplyType: BehavioralCourse mapping: CO3
MO3
Compare the time and space complexity trade-offs between array-based and linked list-based queue implementations
Level: AnalyzeType: CognitiveCourse mapping: CO4
MO4
Differentiate between queue and stack data structures by contrasting their FIFO and LIFO ordering principles, points of access, and appropriate use cases
Level: AnalyzeType: CognitiveCourse mapping: CO1
MO5
Select the appropriate data structure — queue or stack — for a given problem scenario by justifying the choice based on required ordering behavior and access patterns
Level: EvaluateType: CognitiveCourse mapping: CO2

Module 6: Recursion: Concepts and Implementation

Topics

What is Recursion?

Introduces recursion as a programming strategy where a function calls itself to solve a problem. Establishes the conceptual foundation before diving into technical details.

Base Cases and Recursive Cases

Explains the two essential components of any recursive function: the base case that stops recursion and the recursive case that progresses toward it. Covers why both are necessary to avoid infinite loops.

The Call Stack and Recursion

Describes how the call stack manages recursive function calls, tracking execution context at each level. Explores stack frames, stack depth, and the risk of stack overflow.

Implementing Factorial with Recursion

Walks through building a classic recursive factorial function in JavaScript as a concrete first implementation. Connects the mathematical definition of factorial to recursive code structure.

Fibonacci Sequence Using Recursion

Guides students through implementing the Fibonacci sequence recursively in JavaScript, illustrating functions with multiple recursive calls. Discusses the trade-offs of naive recursive Fibonacci in terms of performance.

Recursive List Traversal

Demonstrates how recursion can be applied to traverse and process lists or array structures in JavaScript. Highlights how recursive thinking simplifies problems that involve repeated nested or sequential processing.

When to Use Recursion

Compares recursion to iterative approaches, helping students recognize problem types best suited to recursive solutions. Covers readability, performance considerations, and practical guidelines for choosing recursion.

Learning Outcomes

MO1
Distinguish between the base case and recursive case in a recursive function, explaining how each component prevents infinite recursion and stack overflow
Level: AnalyzeType: CognitiveCourse mapping: CO1
MO2
Implement recursive solutions in JavaScript for classic problems including factorial, Fibonacci sequence, and list traversal
Level: ApplyType: BehavioralCourse mapping: CO3
MO3
Trace the growth and resolution of the call stack — including individual stack frames — through a recursive function execution such as factorial(3) or fibonacci(4)
Level: AnalyzeType: CognitiveCourse mapping: CO4
MO4
Evaluate whether a given problem is better solved using recursion or iteration, justifying the selection based on problem structure, readability, and performance considerations
Level: EvaluateType: CognitiveCourse mapping: CO2
MO5
Identify the performance trade-offs of naive recursive implementations, such as redundant subproblem recalculation in the Fibonacci sequence, and describe strategies to mitigate stack overflow risk
Level: AnalyzeType: CognitiveCourse mapping: CO4

Module 7: Computational Complexity: Deep Dive into Analysis

Topics

Foundations of Computational Complexity

Introduces the core concepts and goals of computational complexity theory, establishing why analyzing algorithm efficiency matters. Covers the fundamental vocabulary and mental models needed for deeper analysis.

Big O Notation Revisited

Provides an in-depth review of Big O notation as a measure of upper-bound algorithm performance. Reinforces how to express and interpret growth rates for common algorithm patterns.

Best, Worst, and Average Case Analysis

Explores how algorithm performance varies depending on the nature of the input data across three distinct scenarios. Students learn to identify and calculate each case for a given algorithm.

Omega and Theta Notations

Introduces Omega notation for lower bounds and Theta notation for tight bounds, complementing the upper-bound perspective of Big O. Students learn when and how to apply each notation appropriately.

Comparing Asymptotic Notations

Examines the relationships between Big O, Omega, and Theta notations and how they work together to fully characterize algorithm complexity. Highlights the distinctions and practical use cases for each.

Complexity Analysis of Known Algorithms

Applies complexity analysis techniques to algorithms already encountered in the course, such as sorting and searching algorithms. Students practice deriving and justifying complexity classifications for familiar examples.

Practical Implications of Complexity

Connects theoretical complexity analysis to real-world decisions about algorithm selection and optimization. Discusses how understanding complexity guides engineers in building efficient, scalable software.

Learning Outcomes

MO1
Differentiate between Big O, Omega, and Theta notations by explaining the distinct role each plays in characterizing the upper, lower, and tight bounds of an algorithm's asymptotic behavior
Level: AnalyzeType: CognitiveCourse mapping: CO4
MO2
Derive the best-case, worst-case, and average-case complexity of familiar algorithms — including linear search, binary search, bubble sort, merge sort, and selection sort — using appropriate asymptotic notation
Level: ApplyType: CognitiveCourse mapping: CO4
MO3
Classify common algorithm patterns such as single loops, nested loops, and recursive halving into their corresponding Big O growth rate categories by identifying dominant operations and dropping lower-order terms
Level: ApplyType: CognitiveCourse mapping: CO4
MO4
Evaluate algorithm selection decisions for a given problem scenario by comparing the scalability, time-space trade-offs, and practical performance implications of candidate algorithms using complexity analysis
Level: EvaluateType: CognitiveCourse mapping: CO2
MO5
Justify the choice of asymptotic notation used to characterize a specific algorithm by articulating the analytical goal — whether establishing worst-case guarantees, proving lower bounds, or confirming tight bounds
Level: EvaluateType: CognitiveCourse mapping: CO4

Module 8: Sorting Algorithms: Comparison and Implementation

Topics

Introduction to Sorting Algorithms

Overview of what sorting algorithms are and why they matter in computer science. Establishes foundational vocabulary and criteria used to evaluate and compare sorting approaches.

Bubble Sort

Examination of the bubble sort algorithm, including its step-by-step logic and JavaScript implementation. Covers its time complexity and scenarios where it may or may not be practical.

Insertion Sort

Exploration of the insertion sort algorithm and how it builds a sorted array one element at a time. Includes JavaScript implementation and analysis of its performance characteristics.

Merge Sort

Deep dive into the divide-and-conquer merge sort algorithm and its recursive structure. Students implement merge sort in JavaScript and examine its consistent O(n log n) time complexity.

Quicksort

Introduction to quicksort's partitioning strategy and its average-case efficiency. Covers JavaScript implementation, pivot selection considerations, and best versus worst-case performance.

Comparing Sorting Algorithms

Side-by-side comparison of bubble sort, insertion sort, merge sort, and quicksort across time and space complexity metrics. Guides students in selecting the appropriate algorithm based on data size and structure.

Learning Outcomes

MO1
Implement bubble sort, insertion sort, merge sort, and quicksort algorithms in JavaScript using appropriate loop and recursive structures
Level: ApplyType: CognitiveCourse mapping: CO3
MO2
Analyze the best-case, average-case, and worst-case time complexity and space complexity of each sorting algorithm using Big O notation
Level: AnalyzeType: CognitiveCourse mapping: CO4
MO3
Differentiate between sorting algorithms based on stability, in-place properties, and practical performance characteristics across varying input sizes and orderings
Level: AnalyzeType: CognitiveCourse mapping: CO1
MO4
Evaluate and select the most appropriate sorting algorithm for a given scenario by weighing data size, input order, memory constraints, and stability requirements
Level: EvaluateType: CognitiveCourse mapping: CO2

Module 9: Hash Compression: Concepts and Techniques

Topics

Introduction to Hash Compression

Defines hash compression and explains the fundamental problem of mapping large key spaces to smaller, bounded index ranges. Establishes the motivation and core vocabulary for understanding hash functions.

Modular Arithmetic as a Compression Strategy

Explores the use of the modulo operation to compress hash values into a target index range. Examines how table size selection affects the quality and uniformity of the resulting distribution.

Folding and Other Compression Techniques

Introduces folding methods that divide keys into segments and combine them to produce a compressed index. Surveys additional compression strategies and compares their approaches to reducing key space.

Distribution Properties of Hash Functions

Analyzes how well different compression techniques spread keys uniformly across the index range. Discusses concepts such as clustering, load factor, and what makes a distribution desirable for hash table performance.

Comparing and Selecting Compression Methods

Provides a framework for evaluating trade-offs among compression strategies based on efficiency, uniformity, and implementation complexity. Guides students in choosing an appropriate method for a given use case.

Learning Outcomes

MO1
Define hash compression and identify the core properties that distinguish an effective hash function from an ineffective one
Level: RememberType: CognitiveCourse mapping: CO1
MO2
Apply modular arithmetic, shift folding, boundary folding, digit extraction, and the mid-square method to compress a given key into a valid hash table index
Level: ApplyType: CognitiveCourse mapping: CO3
MO3
Analyze how compression technique choice, table size selection, and load factor collectively affect the uniformity of key distribution and the frequency of collisions in a hash table
Level: AnalyzeType: CognitiveCourse mapping: CO4
MO4
Evaluate trade-offs among compression strategies—including efficiency, distribution uniformity, and implementation complexity—to select an appropriate method for a specified use case
Level: EvaluateType: CognitiveCourse mapping: CO2

Module 10: Hash Tables: Structure and Collision Resolution

Topics

Introduction to Hash Tables

Overview of the hash table data structure and its core purpose as a key-value store. Introduces the concept of hashing and why hash tables are widely used in software development.

Internal Array-Based Design

Explains how hash tables are built on top of arrays and how hash functions map keys to array indices. Covers the role of hash functions in determining storage location and retrieval efficiency.

Hash Function Design and Properties

Examines what makes a good hash function, including uniformity, determinism, and speed. Discusses common hashing techniques and how poor hash functions lead to performance problems.

Collision Resolution: Chaining

Covers the chaining strategy for handling collisions, where multiple key-value pairs at the same index are stored in a linked list or similar structure. Analyzes the trade-offs and performance implications of chaining.

Collision Resolution: Open Addressing

Introduces open addressing techniques such as linear probing, quadratic probing, and double hashing as alternatives to chaining. Discusses how each technique locates an alternative slot when a collision occurs.

Performance Analysis of Hash Tables

Analyzes the time and space complexity of hash table operations including insertion, deletion, and lookup. Explores how load factor and collision frequency impact average and worst-case performance.

Implementing a Hash Table in JavaScript

Guides students through a hands-on JavaScript implementation of a hash table incorporating a hash function and a chosen collision resolution strategy. Reinforces theoretical concepts through practical coding exercises.

Learning Outcomes

MO1
Explain how a hash function maps keys to array indices and identify the properties — determinism, uniform distribution, and computational speed — that characterize a well-designed hash function
Level: UnderstandType: CognitiveCourse mapping: CO1
MO2
Compare chaining and open addressing collision resolution strategies — including linear probing, quadratic probing, and double hashing — by analyzing their trade-offs in memory use, load factor constraints, and deletion handling
Level: AnalyzeType: CognitiveCourse mapping: CO2
MO3
Evaluate the time complexity of hash table insertion, deletion, and lookup operations under average-case and worst-case conditions by relating collision frequency and load factor to divergence from O(1) performance
Level: EvaluateType: CognitiveCourse mapping: CO4
MO4
Construct a functioning hash table in JavaScript — including a hash function, set, get, remove, and keys methods with separate chaining — and validate correctness through systematic testing
Level: CreateType: BehavioralCourse mapping: CO3

Module 11: Hash Algorithms and Applications: Password Hashing and Beyond

Topics

Introduction to Hashing Algorithms

This topic introduces the foundational concepts of hashing algorithms, explaining what hash functions are and how they transform input data into fixed-length outputs. It establishes the vocabulary and core principles needed for deeper exploration throughout the module.

Cryptographic Hash Functions

This topic examines the properties that distinguish cryptographic hash functions from general-purpose hash functions, including collision resistance, preimage resistance, and avalanche effect. Students explore widely used algorithms such as SHA-256 and MD5 and understand their roles in security contexts.

Password Hashing Fundamentals

This topic covers how hashing is applied specifically to password storage, explaining why plain-text and simple-hash storage are insecure. Students learn how systems use dedicated password hashing algorithms to protect user credentials at rest.

Salting and Advanced Password Protection Techniques

This topic explores salting as a critical technique for defending against rainbow table and dictionary attacks, detailing how random salts are generated and stored alongside password hashes. It also introduces concepts such as key stretching and modern algorithms like bcrypt, scrypt, and Argon2.

Ensuring Data Integrity with Hashing

This topic demonstrates how hash functions are used beyond passwords to verify the integrity of files, messages, and software distributions. Students examine real-world use cases including checksums, digital signatures, and hash-based message authentication codes (HMACs).

Common Attacks and Vulnerabilities

This topic identifies the most significant threats against hashing implementations, including brute-force attacks, collision attacks, and rainbow table lookups. Students learn to recognize weak hashing practices and understand the conditions under which hash-based security can fail.

Best Practices and Real-World Applications

This topic synthesizes the module by presenting industry best practices for implementing hashing securely in modern software systems. Students explore practical applications across authentication, blockchain, digital forensics, and secure communications.

Learning Outcomes

MO1
Distinguish between hashing and encryption, and compare the security properties of cryptographic hash functions — including preimage resistance, collision resistance, and the avalanche effect — across algorithms such as MD5 and SHA-256
Level: AnalyzeType: CognitiveCourse mapping: CO1
MO2
Explain why dedicated password hashing algorithms (bcrypt, scrypt, Argon2) with salting and work factors provide stronger protection than applying general-purpose cryptographic hash functions directly to passwords
Level: UnderstandType: CognitiveCourse mapping: CO4
MO3
Evaluate common attack vectors — including brute-force, rainbow table, collision, timing, and dictionary attacks — and select appropriate countermeasures such as salting, peppering, key stretching, and HMAC-based authentication to mitigate each threat
Level: EvaluateType: CognitiveCourse mapping: CO2
MO4
Apply hash-based integrity mechanisms — including checksums, HMACs, and digital signatures — to real-world scenarios such as software distribution verification, secure communications, and digital forensics evidence handling
Level: ApplyType: BehavioralCourse mapping: CO2
MO5
Design a secure password storage and verification scheme for an authentication system that incorporates a modern password hashing algorithm, cryptographically secure salt generation, and work factor tuning aligned with industry best practices
Level: CreateType: BehavioralCourse mapping: CO3

Module 12: Binary Trees: Structure, Traversal, and Operations

Topics

Introduction to Binary Trees

Defines binary trees as a foundational data structure and explains core terminology including nodes, edges, roots, leaves, and parent-child relationships. Establishes the structural rules that distinguish binary trees from other tree types.

Node Structure and Tree Anatomy

Examines how individual nodes are constructed, including data storage and left and right child pointers. Covers key tree properties such as height, depth, and balance.

Binary Search Trees (BST) Concepts

Introduces the binary search tree as a specialized binary tree where left child values are less than the parent and right child values are greater. Explains how this ordering property enables efficient search operations.

Insertion and Search Operations

Describes the logic for inserting new nodes into a BST while maintaining the ordering property, and outlines how search leverages that structure to locate values efficiently. Includes analysis of best and worst case performance.

Deletion Operations

Covers the three cases of node deletion in a BST: removing a leaf, a node with one child, and a node with two children. Explains how the in-order successor or predecessor is used to preserve BST integrity.

Tree Traversal Strategies

Explores in-order, pre-order, and post-order traversal algorithms, detailing the sequence in which nodes are visited for each approach. Highlights practical use cases such as sorted output and tree serialization.

Implementing a BST in JavaScript

Guides students through a hands-on JavaScript implementation of a binary search tree, including class and method definitions for insertion, deletion, and traversal. Reinforces conceptual understanding through working code examples.

Learning Outcomes

MO1
Identify the structural components of a binary tree — including nodes, edges, root, leaves, depth, height, and parent-child relationships — and distinguish a binary search tree from a general binary tree based on the BST ordering property
Level: RememberType: CognitiveCourse mapping: CO1
MO2
Trace in-order, pre-order, and post-order traversal algorithms on a given binary search tree, predicting the sequence of nodes visited and explaining the practical use case suited to each strategy
Level: AnalyzeType: CognitiveCourse mapping: CO2
MO3
Apply BST insertion, search, and deletion logic — including all three deletion cases and the use of in-order successor or predecessor — to modify a binary search tree while preserving the ordering property
Level: ApplyType: CognitiveCourse mapping: CO2
MO4
Compare best-case and worst-case time complexity for BST insertion and search operations, relating performance outcomes to the effect of tree balance and insertion order on tree height
Level: EvaluateType: CognitiveCourse mapping: CO4
MO5
Construct a functioning JavaScript implementation of a binary search tree that includes Node and BinarySearchTree class definitions with working insert, search, delete, and traversal methods validated through concrete test cases
Level: CreateType: BehavioralCourse mapping: CO3

Module 13: Advanced Tree Structures: AVL Trees, Heaps, and Tries

Topics

Review of Binary Search Trees and Their Limitations

Revisits the foundational concepts of binary search trees and highlights the performance problems that arise when trees become unbalanced. Establishes the motivation for exploring more advanced tree structures.

AVL Trees and Self-Balancing Mechanisms

Introduces AVL trees as a self-balancing extension of binary search trees, explaining how balance factors and rotations maintain optimal tree height. Covers the rules and operations that keep AVL trees balanced after insertions and deletions.

AVL Tree Performance and Use Cases

Analyzes the time and space complexity of AVL tree operations compared to standard binary search trees. Examines real-world scenarios where AVL trees provide a performance advantage.

Heap Trees and Priority Queues

Explains the structure and properties of min-heaps and max-heaps, including how elements are inserted and removed while maintaining the heap property. Connects heap trees to their primary application in implementing efficient priority queues.

Heap Operations and Performance Trade-offs

Details the algorithmic steps behind key heap operations such as heapify, insert, and extract-min or extract-max. Evaluates the computational trade-offs of heaps relative to other data structures for priority-based tasks.

Trie Structures for String Storage and Retrieval

Introduces tries as tree structures optimized for storing and searching strings character by character. Covers trie construction, insertion, and lookup operations along with their advantages for prefix-based searching.

Comparing Advanced Tree Structures: Use Cases and Trade-offs

Provides a comparative analysis of AVL trees, heaps, and tries, summarizing when each structure is most appropriate based on performance characteristics and problem requirements. Reinforces decision-making skills for selecting the right tree structure in practice.

Learning Outcomes

MO1
Explain why standard binary search trees degrade to O(n) performance in worst-case scenarios and identify the structural properties that AVL trees, heaps, and tries use to overcome these limitations
Level: UnderstandType: CognitiveCourse mapping: CO1
MO2
Trace AVL tree insertion and deletion operations, applying single and double rotations to restore the balance factor invariant after structural changes
Level: ApplyType: CognitiveCourse mapping: CO3
MO3
Trace heap insert, extract-min/extract-max, and heapify operations using an array-based representation, correctly computing parent and child index relationships at each step
Level: ApplyType: CognitiveCourse mapping: CO3
MO4
Construct a trie from a set of strings and execute prefix-based search operations by tracing character-by-character traversal through trie nodes
Level: ApplyType: CognitiveCourse mapping: CO3
MO5
Evaluate the time complexity, space complexity, and practical trade-offs of AVL trees, heaps, and tries to justify the selection of the most appropriate structure for a given problem scenario
Level: EvaluateType: CognitiveCourse mapping: CO2

Module 14: Graphs: Structure, Representation, and Traversal

Topics

Introduction to Graph Data Structures

Defines what a graph is and explains its core components, including vertices and edges. Establishes the foundational vocabulary needed to understand graph theory and its applications.

Directed and Undirected Graphs

Explores the distinction between directed graphs, where edges have a defined direction, and undirected graphs, where edges are bidirectional. Covers real-world use cases and examples for each type.

Adjacency Matrix Representation

Explains how a graph can be represented using a two-dimensional matrix to capture edge relationships between vertices. Discusses the advantages and trade-offs of this representation in terms of space and time complexity.

Adjacency List Representation

Describes how a graph can be stored as a collection of lists, each mapping a vertex to its neighbors. Contrasts this approach with the adjacency matrix and highlights scenarios where it is more efficient.

Breadth-First Search (BFS)

Introduces the BFS traversal algorithm, which explores a graph level by level using a queue data structure. Covers the algorithm's logic, traversal order, and practical applications.

Depth-First Search (DFS)

Introduces the DFS traversal algorithm, which explores a graph by going as deep as possible along each branch before backtracking. Covers both recursive and iterative implementations and common use cases.

Implementing Graph Traversal in JavaScript

Guides students through building a graph data structure and implementing BFS and DFS traversal algorithms in JavaScript. Reinforces conceptual understanding through hands-on coding practice.

Learning Outcomes

MO1
Distinguish between directed and undirected graphs and select the appropriate graph type to model a given real-world relationship
Level: AnalyzeType: CognitiveCourse mapping: CO2
MO2
Compare adjacency matrix and adjacency list representations by evaluating their space and time complexity trade-offs for sparse and dense graphs
Level: EvaluateType: CognitiveCourse mapping: CO4
MO3
Trace the step-by-step traversal order produced by BFS and DFS algorithms on a given graph, including handling disconnected components
Level: ApplyType: CognitiveCourse mapping: CO1
MO4
Construct a Graph class in JavaScript that implements adjacency list storage and supports both BFS and DFS traversal using recursive and iterative approaches
Level: CreateType: BehavioralCourse mapping: CO3
MO5
Identify practical applications of BFS and DFS and justify which traversal strategy is better suited for a specified problem scenario
Level: EvaluateType: CognitiveCourse mapping: CO2

Module 15: Applied Data Structures: Blockchain, Digital Currency, and Beyond

Topics

Foundations of Data Structures in Real-World Systems

Reviews core data structures including hash tables, trees, and graphs as building blocks for complex computing applications. Establishes the conceptual framework for understanding how these structures are combined in practice.

Blockchain Architecture and Data Structures

Examines how blockchain technology leverages linked data structures, cryptographic hashing, and trees to create immutable, distributed ledgers. Traces the specific structural decisions that make blockchain secure and verifiable.

Digital Currency Systems

Explores how cryptocurrencies and digital payment systems rely on underlying data structures to manage transactions, wallets, and consensus. Connects blockchain fundamentals to the practical mechanics of digital currency.

Graphs and Social Network Applications

Investigates how graph data structures model relationships, influence, and information flow within social networks. Highlights real-world algorithms and traversal strategies used by modern platforms.

Combining Data Structures in Complex Systems

Analyzes how real-world applications integrate multiple data structures simultaneously to achieve performance, scalability, and functionality. Uses case studies to illustrate the trade-offs involved in structural design decisions.

Learning Outcomes

MO1
Explain how linked lists, cryptographic hash functions, and Merkle trees are composed within blockchain architecture to produce immutability and transaction verifiability
Level: UnderstandType: CognitiveCourse mapping: CO1
MO2
Compare adjacency list and adjacency matrix representations of social network graphs, justifying the selection of each based on storage and operation trade-offs
Level: AnalyzeType: CognitiveCourse mapping: CO4
MO3
Trace how BFS and DFS traversal algorithms operate on a social network graph to support features such as connection discovery and community detection
Level: ApplyType: CognitiveCourse mapping: CO4
MO4
Evaluate the structural design decisions of a complex real-world system — such as a digital currency platform — by identifying which data structures are used, how they are integrated, and what trade-offs those choices entail
Level: EvaluateType: CognitiveCourse mapping: CO2
MO5
Design a multi-structure solution for a specified computing problem by selecting and integrating appropriate data structures — such as hash tables, trees, and graphs — and justifying each choice against stated performance and functional requirements
Level: CreateType: CognitiveCourse mapping: CO2