# Data Structures

A **data structure** is a particular way of organizing data in a computer so that it can be used effectively.

For example, we can store a list of items having the same data-type using the *array* data structure.

This page contains detailed tutorials on different data structures (DS) with topic-wise problems.

**Topics:**

**Overview:**

- Overview of Data Structures | Set 1 (Linear Data Structures)
- Overview of Data Structures | Set 2 (Binary Tree, BST, Heap and Hash)
- Overview of Data Structures | Set 3 (Graph, Trie, Segment Tree and Suffix Tree)
- Abstract Data Types

**Singly Linked List:**

- Introduction to Linked List
- Linked List vs Array
- Linked List Insertion
- Linked List Deletion (Deleting a given key)
- Linked List Deletion (Deleting a key at given position)
- A Programmer’s approach of looking at Array vs. Linked List
- Find Length of a Linked List (Iterative and Recursive)
- How to write C functions that modify head pointer of a Linked List?
- Swap nodes in a linked list without swapping data
- Reverse a linked list
- Merge two sorted linked lists
- Merge Sort for Linked Lists
- Reverse a Linked List in groups of given size
- Detect and Remove Loop in a Linked List
- Add two numbers represented by linked lists | Set 1
- Rotate a Linked List
- Generic Linked List in C

**Circular Linked List:**

- Circular Linked List Introduction and Applications,
- Circular Singly Linked List Insertion<
- Circular Linked List Traversal
- Split a Circular Linked List into two halves
- Sorted insert for circular linked list

**Doubly Linked List:**

- Doubly Linked List Introduction and Insertion
- Delete a node in a Doubly Linked List
- Reverse a Doubly Linked List
- The Great Tree-List Recursion Problem.
- QuickSort on Doubly Linked List
- Merge Sort for Doubly Linked List

**All Articles of Linked List**

Quiz on Linked List

Coding Practice on Linked List

Recent Articles on Linked List

- Introduction to Stack
- Infix to Postfix Conversion using Stack
- Evaluation of Postfix Expression
- Reverse a String using Stack
- Implement two stacks in an array
- Check for balanced parentheses in an expression
- Next Greater Element
- Reverse a stack using recursion
- Sort a stack using recursion
- The Stock Span Problem
- Design and Implement Special Stack Data Structure
- Implement Stack using Queues
- Design a stack with operations on middle element
- How to efficiently implement k stacks in a single array?
- Sort a stack using recursion

Quiz on Stack**All Articles on Stack**

Coding Practice on Stack

Recent Articles on Stack

- Queue Introduction and Array Implementation
- Linked List Implementation of Queue
- Applications of Queue Data Structure
- Priority Queue Introduction
- Deque (Introduction and Applications)
- Implementation of Deque using circular array
- Implement Queue using Stacks
- Find the first circular tour that visits all petrol pumps
- Maximum of all subarrays of size k
- An Interesting Method to Generate Binary Numbers from 1 to n
- How to efficiently implement k Queues in a single array?

Quiz on Queue**All Articles on Queue**

Coding Practice on Queue

Recent Articles on Queue

- Binary Tree Introduction
- Binary Tree Properties
- Types of Binary Tree
- Handshaking Lemma and Interesting Tree Properties
- Enumeration of Binary Tree
- Applications of tree data structure
- Tree Traversals
- BFS vs DFS for Binary Tree
- Level Order Tree Traversal
- Diameter of a Binary Tree
- Inorder Tree Traversal without Recursion
- Inorder Tree Traversal without recursion and without stack!
- Threaded Binary Tree
- Maximum Depth or Height of a Tree
- If you are given two traversal sequences, can you construct the binary tree?
- Clone a Binary Tree with Random Pointers
- Construct Tree from given Inorder and Preorder traversals
- Maximum width of a binary tree
- Print nodes at k distance from root
- Print Ancestors of a given node in Binary Tree
- Check if a binary tree is subtree of another binary tree
- Connect nodes at same level

Quiz on Binary Tree

Quiz on Binary Tree Traversals**All articles on Binary Tree**

Coding Practice on Binary Tree

Recent Articles on Tree

- Search and Insert in BST
- Deletion from BST
- Minimum value in a Binary Search Tree
- Inorder predecessor and successor for a given key in BST
- Check if a binary tree is BST or not
- Lowest Common Ancestor in a Binary Search Tree.
- Inorder Successor in Binary Search Tree
- Find k-th smallest element in BST (Order Statistics in BST)
- Merge two BSTs with limited extra space
- Two nodes of a BST are swapped, correct the BST
- Floor and Ceil from a BST
- In-place conversion of Sorted DLL to Balanced BST
- Find a pair with given sum in a Balanced BST
- Total number of possible Binary Search Trees with n keys
- Merge Two Balanced Binary Search Trees
- Binary Tree to Binary Search Tree Conversion

Quiz on Binary Search Trees

Quiz on Balanced Binary Search Trees**All Articles on Binary Search Tree**

Coding Practice on Binary Search Tree

Recent Articles on BST

- Binary Heap
- Why is Binary Heap Preferred over BST for Priority Queue?
- Binomial Heap
- Fibonacci Heap
- Heap Sort
- K’th Largest Element in an array
- Sort an almost sorted array/
- Tournament Tree (Winner Tree) and Binary Heap

**All Articles on Heap**

Quiz on Heap

Coding Practice on Heap

Recent Articles on Heap

- Hashing Introduction
- Separate Chaining for Collision Handling
- Open Addressing for Collision Handling
- Print a Binary Tree in Vertical Order
- Find whether an array is subset of another array
- Union and Intersection of two Linked Lists
- Find a pair with given sum
- Check if a given array contains duplicate elements within k distance from each other
- Find Itinerary from a given list of tickets
- Find number of Employees Under every Employee

Quiz on Hashing**All Articles on Hashing**

Coding Practice on Hashing

Recent Articles on Hashing

**Introduction, DFS and BFS:**

- Graph and its representations
- Breadth First Traversal for a Graph
- Depth First Traversal for a Graph
- Applications of Depth First Search
- Applications of Breadth First Traversal
- Detect Cycle in a Directed Graph
- Detect Cycle in a an Undirected Graph
- Detect cycle in an undirected graph
- Longest Path in a Directed Acyclic Graph
- Topological Sorting
- Check whether a given graph is Bipartite or not
- Snake and Ladder Problem
- Minimize Cash Flow among a given set of friends who have borrowed money from each other
- Boggle (Find all possible words in a board of characters)
- Assign directions to edges so that the directed graph remains acyclic

**All Articles on Graph Data Structure**

Quiz on Graph

Quiz on Graph Traversals

Quiz on Graph Shortest Paths

Quiz on Graph Minimum Spanning Tree

Coding Practice on Graph

Recent Articles on Graph

**Advanced Lists:**

- Memory efficient doubly linked list
- XOR Linked List – A Memory Efficient Doubly Linked List | Set 1
- XOR Linked List – A Memory Efficient Doubly Linked List | Set 2
- Skip List | Set 1 (Introduction)
- Self Organizing List | Set 1 (Introduction)
- Unrolled Linked List | Set 1 (Introduction)

**Segment Tree:**

- Segment Tree | Set 1 (Sum of given range)
- Segment Tree | Set 2 (Range Minimum Query)
- Lazy Propagation in Segment Tree
- Persistent Segment Tree | Set 1 (Introduction)

**All articles on Segment Tree****Trie:**

- Trie | (Insert and Search)
- Trie | (Delete)
- Longest prefix matching – A Trie based solution in Java
- Print unique rows in a given boolean matrix
- How to Implement Reverse DNS Look Up Cache?
- How to Implement Forward DNS Look Up Cache?

**All Articles on Trie****Binary Indexed Tree:**

- Binary Indexed Tree
- Two Dimensional Binary Indexed Tree or Fenwick Tree
- Binary Indexed Tree : Range Updates and Point Queries
- Binary Indexed Tree : Range Update and Range Queries

**All Articles on Binary Indexed Tree*** Suffix Array and Suffix Tree*:

- Suffix Array Introduction
- Suffix Array nLogn Algorithm
- kasai’s Algorithm for Construction of LCP array from Suffix Array
- Suffix Tree Introduction
- Ukkonen’s Suffix Tree Construction – Part 1
- Ukkonen’s Suffix Tree Construction – Part 2
- Ukkonen’s Suffix Tree Construction – Part 3
- Ukkonen’s Suffix Tree Construction – Part 4,
- Ukkonen’s Suffix Tree Construction – Part 5
- Ukkonen’s Suffix Tree Construction – Part 6
- Generalized Suffix Tree
- Build Linear Time Suffix Array using Suffix Tree
- Substring Check
- Searching All Patterns
- Longest Repeated Substring,
- Longest Common Substring, Longest Palindromic Substring

All Articles on Suffix Tree**AVL Tree:**

**Splay Tree:**

**B Tree:**

**Red-Black Tree:**

- Red-Black Tree Introduction
- Red Black Tree Insertion.
- Red-Black Tree Deletion
- Program for Red Black Tree Insertion

All Articles on Self-Balancing BSTs

**K Dimensional Tree:**

*Others:*

- Treap (A Randomized Binary Search Tree)
- Ternary Search Tree
- Interval Tree
- Implement LRU Cache
- Sort numbers stored on different machines
- Find the k most frequent words from a file
- Given a sequence of words, print all anagrams together
- Tournament Tree (Winner Tree) and Binary Heap
- Decision Trees – Fake (Counterfeit) Coin Puzzle (12 Coin Puzzle)
- Spaghetti Stack
- Data Structure for Dictionary and Spell Checker?
- Cartesian Tree
- Cartesian Tree Sorting
- Sparse Set
- Centroid Decomposition of Tree
- Gomory-Hu Tree

Recent Articles on Advanced Data Structures.

- Search, insert and delete in an unsorted array
- Search, insert and delete in a sorted array
- Write a program to reverse an array
- Leaders in an array
- Given an array A[] and a number x, check for pair in A[] with sum as x
- Majority Element
- Find the Number Occurring Odd Number of Times
- Largest Sum Contiguous Subarray
- Find the Missing Number
- Search an element in a sorted and pivoted array
- Merge an array of size n into another array of size m+n
- Median of two sorted arrays
- Program for array rotation
- Reversal algorithm for array rotation
- Block swap algorithm for array rotation
- Maximum sum such that no two elements are adjacent
- Sort elements by frequency | Set 1
- Count Inversions in an array

**All Articles on Array**

Coding Practice on Array

Quiz on Array

Coding Practice on Array

Recent Articles on Array

- Search in a row wise and column wise sorted matrix
- Print a given matrix in spiral form
- A Boolean Matrix Question
- Print unique rows in a given boolean matrix
- Maximum size square sub-matrix with all 1s
- Print unique rows in a given boolean matrix
- Inplace M x N size matrix transpose | Updated
- Dynamic Programming | Set 27 (Maximum sum rectangle in a 2D matrix)
- Strassen’s Matrix Multiplication
- Create a matrix with alternating rectangles of O and X
- Print all elements in sorted order from row and column wise sorted matrix
- Given an n x n square matrix, find sum of all sub-squares of size k x k
- Count number of islands where every island is row-wise and column-wise separated
- Find a common element in all rows of a given row-wise sorted matrix

**All Articles on Matrix**

Coding Practice on Matrix

Recent Articles on Matrix.

### Geeksforgeeks Courses:

**1. Language Foundation Courses [C++ / JAVA / Python ]**

Learn any programming language from scratch and understand all its fundamentals concepts for a strong programming foundation in the easiest possible manner with help of GeeksforGeeks Language Foundation Courses – Java Foundation | Python Foundation | C++ Foundation

**2. Geeks Classes Live**

Get interview-centric live online classes on Data Structure and Algorithms from any geographical location to learn and master DSA concepts for enhancing your problem-solving & programming skills and to crack the interview of any product-based company – Geeks Classes: Live Session

**3. ****Complete Interview Preparation**

Get fulfilled all your interview preparation needs at a single place with the *Complete Interview Preparation Course *that provides you all the required stuff to prepare for any product-based, service-based, or start-up company at the most affordable prices.

**4. DSA Self Paced**

Start learning Data Structures and Algorithms to prepare for the interviews of top IT giants like Microsoft, Amazon, Adobe, etc. with

*DSA Self-Paced Course*where you will get to learn and master DSA from basic to advanced level and that too at your own pace and convenience.

**5. Company Specific Courses – Amazon, Microsoft, TCS & Wipro**

Crack the interview of any product-based giant company by specifically preparing with the questions that these companies usually ask in their coding interview round. Refer GeeksforGeeks Company Specific Courses: Amazon SDE Test Series, etc.