Useful Links
Computer Science
Algorithms and Data Structures
Algorithms
1. Introduction to Algorithms
2. Data Structures
3. Algorithmic Design Paradigms
4. Sorting and Searching Algorithms
5. Graph Algorithms
6. Advanced Algorithm Topics
7. Complexity Theory
Data Structures
Abstract Data Types
Definition and Purpose
Interface vs Implementation
Specification Methods
Examples of ADTs
List ADT
Stack ADT
Queue ADT
Set ADT
Map ADT
Linear Data Structures
Arrays
Static Arrays
Memory Layout
Contiguous Memory Allocation
Index-Based Access
Access Time Complexity
Cache Performance
Dynamic Arrays
Resizing Strategies
Doubling Strategy
Incremental Growth
Amortized Analysis
Implementation Details
Array Operations
Insertion
At Beginning
At End
At Arbitrary Position
Deletion
From Beginning
From End
From Arbitrary Position
Traversal
Searching
Sorting
Multi-dimensional Arrays
Two-dimensional Arrays
Row-major vs Column-major Order
Sparse Arrays
Linked Lists
Singly Linked Lists
Node Structure
Memory Allocation
Basic Operations
Insertion at Head
Insertion at Tail
Insertion at Position
Deletion by Value
Deletion by Position
Search
Traversal
Memory Management
Doubly Linked Lists
Node Structure
Bidirectional Links
Forward and Backward Traversal
Insertion Operations
Deletion Operations
Advantages over Singly Linked Lists
Circular Linked Lists
Singly Circular Lists
Doubly Circular Lists
Structure and Use Cases
Traversal Techniques
Termination Conditions
Comparison with Arrays
Time Complexity
Space Complexity
Cache Performance
Stacks
LIFO Principle
Core Operations
Push
Pop
Peek/Top
IsEmpty
Size
Implementation Methods
Array-based Implementation
Linked List Implementation
Stack Applications
Expression Evaluation
Infix to Postfix Conversion
Postfix Evaluation
Parentheses Matching
Function Call Management
Backtracking Algorithms
Undo Operations
Browser History
Stack Overflow and Underflow
Queues
FIFO Principle
Core Operations
Enqueue
Dequeue
Front
Rear
IsEmpty
Size
Implementation Methods
Array-based Implementation
Circular Array
Linear Array
Linked List Implementation
Queue Variants
Priority Queues
Definition and Use Cases
Implementation Strategies
Unsorted Array
Sorted Array
Binary Heap
Deques
Operations
Insert Front
Insert Rear
Delete Front
Delete Rear
Implementation
Circular Queues
Wrap-around Logic
Full vs Empty Conditions
Non-Linear Data Structures
Trees
Basic Terminology
Root
Node
Leaf
Internal Node
Edge
Path
Height and Depth
Level
Degree
Subtree
Ancestor and Descendant
Sibling
Tree Properties
Number of Edges
Relationship between Nodes and Edges
Tree vs Forest
Binary Trees
Types of Binary Trees
Full Binary Tree
Complete Binary Tree
Perfect Binary Tree
Balanced Binary Tree
Representation
Array Representation
Linked Representation
Traversal Methods
Depth-First Traversals
In-order Traversal
Pre-order Traversal
Post-order Traversal
Breadth-First Traversal
Level-order Traversal
Binary Search Trees
BST Property
Search Operation
Recursive Implementation
Iterative Implementation
Insertion
Maintaining BST Property
Duplicate Handling
Deletion
Node with No Children
Node with One Child
Node with Two Children
Successor and Predecessor
Traversal Methods
Performance Analysis
Balancing Issues
Degenerate Cases
Skewed Trees
Self-Balancing Trees
Need for Balancing
AVL Trees
Balance Factor
Rotations
Single Right Rotation
Single Left Rotation
Left-Right Rotation
Right-Left Rotation
Insertion with Balancing
Deletion with Balancing
Height Guarantee
Red-Black Trees
Color Rules
Insertion Algorithm
Color Flipping
Rotations
Deletion Algorithm
Comparison with AVL Trees
Splay Trees
Splaying Operation
Access Patterns
Amortized Analysis
B-Trees
Definition and Properties
Order and Degree
Node Structure
Search Operation
Insertion
Node Splitting
Propagation
Deletion
Borrowing
Merging
Applications in Databases
B+ Trees
Differences from B-Trees
Leaf Node Linking
Heaps
Heap Property
Binary Heaps
Min-Heap Property
Max-Heap Property
Complete Binary Tree Structure
Array Representation
Parent-Child Relationships
Index Calculations
Heap Operations
Insert
Bubble-Up Process
Time Complexity
Extract-Min/Extract-Max
Root Removal
Bubble-Down Process
Time Complexity
Heapify
Bottom-Up Heapification
Top-Down Heapification
Build-Heap
Linear Time Construction
Decrease-Key/Increase-Key
Heap Applications
Priority Queues
Heapsort Algorithm
Graph Algorithms
Heap Variants
d-ary Heaps
Binomial Heaps
Fibonacci Heaps
Hash Tables
Hashing Concepts
Hash Functions
Properties of Good Hash Functions
Uniform Distribution
Deterministic
Efficient Computation
Common Hash Functions
Division Method
Multiplication Method
Universal Hashing
Cryptographic Hash Functions
Hash Table Structure
Direct Addressing
Collision Resolution Strategies
Chaining
Linked List Implementation
Dynamic Arrays
Load Factor Analysis
Performance Analysis
Open Addressing
Linear Probing
Primary Clustering
Performance Analysis
Quadratic Probing
Secondary Clustering
Probe Sequence
Double Hashing
Secondary Hash Function
Probe Sequence
Deletion in Open Addressing
Tombstone Approach
Rehashing Approach
Load Factor and Performance
Load Factor Definition
Performance Impact
Rehashing
When to Rehash
Rehashing Process
Amortized Analysis
Applications of Hash Tables
Symbol Tables
Caching
Database Indexing
Cryptography
Graphs
Graph Terminology
Vertex/Node
Edge/Arc
Adjacent Vertices
Incident Edges
Path
Simple Path
Cycle
Simple Cycle
Degree
In-degree
Out-degree
Connected Components
Strongly Connected Components
Graph Types
Directed vs Undirected Graphs
Definitions
Use Cases
Conversion Between Types
Weighted vs Unweighted Graphs
Edge Weights
Simple vs Multigraphs
Complete Graphs
Bipartite Graphs
Trees as Graphs
DAGs
Graph Representations
Adjacency Matrix
Structure
Space Complexity
Time Complexity for Operations
Advantages and Disadvantages
Adjacency List
Structure
Space Complexity
Time Complexity for Operations
Advantages and Disadvantages
Edge List
Structure
Use Cases
Incidence Matrix
Structure
Comparison of Representations
Previous
1. Introduction to Algorithms
Go to top
Next
3. Algorithmic Design Paradigms