- Data Structures & Algorithms
- DSA - Home
- DSA - Introduction
- DSA - Environment Setup
- DSA - Algorithms Basics
- DSA - Characteristics of Algorithms
- DSA - Asymptotic Analysis
- Data Structures
- DSA - Data Structure Basics
- DSA - Data Structures and Types
- DSA - Array Data Structure
- Linked Lists
- DSA - Linked List Data Structure
- DSA - Single Linked List Data Structure
- DSA - Doubly Linked List Data Structure
- DSA - Circular Linked List Data Structure
- Stack & Queue
- DSA - Stack Data Structure
- DSA - Expression Parsing
- DSA - Queue Data Structure
- Searching Algorithms
- DSA - Searching Algorithms
- DSA - Linear Search Algorithm
- DSA - Binary Search Algorithm
- DSA - Interpolation Search
- DSA - Jump Search Algorithm
- DSA - Exponential Search
- DSA - Fibonacci Search
- DSA - Sublist Search
- DSA - Hash Table
- Sorting Algorithms
- DSA - Sorting Algorithms
- DSA - Bubble Sort Algorithm
- DSA - Insertion Sort Algorithm
- DSA - Selection Sort Algorithm
- DSA - Merge Sort Algorithm
- DSA - Shell Sort Algorithm
- DSA - Heap Sort
- DSA - Bucket Sort Algorithm
- DSA - Counting Sort Algorithm
- DSA - Radix Sort Algorithm
- DSA - Quick Sort Algorithm
- Graph Data Structure
- DSA - Graph Data Structure
- DSA - Depth First Traversal
- DSA - Breadth First Traversal
- DSA - Spanning Tree
- Tree Data Structure
- DSA - Tree Data Structure
- DSA - Tree Traversal
- DSA - Binary Search Tree
- DSA - AVL Tree
- DSA - Red Black Trees
- DSA - B Trees
- DSA - B+ Trees
- DSA - Splay Trees
- DSA - Tries
- DSA - Heap Data Structure
- Recursion
- DSA - Recursion Algorithms
- DSA - Tower of Hanoi Using Recursion
- DSA - Fibonacci Series Using Recursion
- Divide and Conquer
- DSA - Divide and Conquer
- DSA - Max-Min Problem
- DSA - Strassen's Matrix Multiplication
- DSA - Karatsuba Algorithm
- Greedy Algorithms
- DSA - Greedy Algorithms
- DSA - Travelling Salesman Problem (Greedy Approach)
- DSA - Prim's Minimal Spanning Tree
- DSA - Kruskal's Minimal Spanning Tree
- DSA - Dijkstra's Shortest Path Algorithm
- DSA - Map Colouring Algorithm
- DSA - Fractional Knapsack Problem
- DSA - Job Sequencing with Deadline
- DSA - Optimal Merge Pattern Algorithm
- Dynamic Programming
- DSA - Dynamic Programming
- DSA - Matrix Chain Multiplication
- DSA - Floyd Warshall Algorithm
- DSA - 0-1 Knapsack Problem
- DSA - Longest Common Subsequence Algorithm
- DSA - Travelling Salesman Problem (Dynamic Approach)
- Approximation Algorithms
- DSA - Approximation Algorithms
- DSA - Vertex Cover Algorithm
- DSA - Set Cover Problem
- DSA - Travelling Salesman Problem (Approximation Approach)
- Randomized Algorithms
- DSA - Randomized Algorithms
- DSA - Randomized Quick Sort Algorithm
- DSA - Karger’s Minimum Cut Algorithm
- DSA - Fisher-Yates Shuffle Algorithm
Data Structures & Algorithms - Introduction
![]() Share with a Friend |
Data Structure - Introduction
A data structure is a way of organizing, storing, and managing data in a computer so that it can be accessed and modified efficiently. It provides a systematic way of handling and processing data to optimize performance in various applications.
Types of Data Structures
Data structures are mainly classified into two types:
1. Linear Data Structures
In linear data structures, data elements are arranged sequentially, and each element is connected to its previous and next elements. Operations like insertion, deletion, and traversal are performed in a linear order.
Examples of Linear Data Structures:
1.1 Arrays
- A collection of elements stored in contiguous memory locations.
- Elements are accessed using an index.
- Example:
C
int arr[5] = {10, 20, 30, 40, 50};
- Applications: Used in databases, caching, and dynamic programming.
1.2 Linked Lists
- A collection of nodes where each node contains data and a reference (pointer) to the next node.
- Types:
- Singly Linked List → Nodes linked in one direction.
- Doubly Linked List → Nodes linked in both directions.
- Circular Linked List → Last node connects back to the first node.
- Applications: Used in dynamic memory allocation, undo/redo features, and hash tables.
1.3 Stacks
- Follows LIFO (Last In, First Out) principle.
- Operations:
- Push → Insert element at the top.
- Pop → Remove element from the top.
- Applications: Used in function calls, expression evaluation, and backtracking.
1.4 Queues
- Follows FIFO (First In, First Out) principle.
- Operations:
- Enqueue → Insert element at the rear.
- Dequeue → Remove element from the front.
- Types:
- Simple Queue → Basic FIFO queue.
- Circular Queue → Last position is connected to the first position.
- Priority Queue → Elements are dequeued based on priority.
- Deque (Double-Ended Queue) → Elements can be added/removed from both ends.
- Applications: Used in task scheduling, process management, and network buffering.
2. Non-Linear Data Structures
In non-linear data structures, data elements are not arranged sequentially but hierarchically or in complex relationships.
Examples of Non-Linear Data Structures:
2.1 Trees
- A hierarchical data structure consisting of nodes.
- Types of Trees:
- Binary Tree → Each node has at most two children.
- Binary Search Tree (BST) → Left child < Root < Right child.
- AVL Tree → Self-balancing BST.
- Heap (Min-Heap/Max-Heap) → Complete binary tree used for priority-based tasks.
- Applications: Used in databases, file systems, and artificial intelligence.
2.2 Graphs
- A set of vertices (nodes) connected by edges.
- Types of Graphs:
- Directed Graph → Edges have direction.
- Undirected Graph → Edges do not have direction.
- Weighted Graph → Edges have weights.
- Applications: Used in social networks, navigation systems, and recommendation engines.
2.3 Hash Tables
- Stores data in key-value pairs using a hash function.
- Collision resolution techniques include chaining and open addressing.
- Applications: Used in database indexing, caching, and cryptography.
Comparison of Linear vs. Non-Linear Data Structures
| Feature | Linear Data Structures | Non-Linear Data Structures |
|---|---|---|
| Storage Order |
Sequential |
Hierarchical/Interlinked |
| Memory Usage |
Less efficient |
More efficient for large datasets |
| Example Structures |
Arrays, Stacks, Queues, Linked Lists |
Trees, Graphs, Hash Tables |
| Traversal Method |
Sequential |
Can be complex (DFS, BFS) |
Importance of Data Structures
- Efficient Data Management → Helps in organizing large amounts of data.
- Faster Processing → Improves algorithm efficiency and execution speed.
- Optimized Memory Usage → Reduces space complexity.
- Better Problem Solving → Essential in applications like databases, networking, and artificial intelligence.
Algorithm - Introduction
An algorithm is a step-by-step procedure or a set of rules used to solve a problem or perform a specific task in a finite number of steps.
It is a fundamental concept in computer science and mathematics, used to design efficient solutions for various computational problems.
Characteristics of an Algorithm
A well-defined algorithm should have the following properties:
- Input → Takes zero or more inputs.
- Output → Produces at least one output.
- Definiteness → Every step should be clearly defined.
- Finiteness → It must end after a finite number of steps.
- Effectiveness → Each step must be simple enough to be performed using basic operations.
Types of Algorithms
1. Brute Force Algorithm
- Tries all possible solutions and selects the best one.
- Example: Finding the smallest number in an unsorted array by checking each element.
2. Divide and Conquer Algorithm
- Breaks a problem into smaller subproblems, solves them independently, and combines the results.
- Example: Merge Sort, Quick Sort, Binary Search.
3. Greedy Algorithm
- Makes the locally optimal choice at each step to reach a globally optimal solution.
- Example: Dijkstra’s Shortest Path Algorithm, Huffman Coding.
4. Dynamic Programming (DP) Algorithm
- Solves complex problems by breaking them into overlapping subproblems and storing the results for future use.
- Example: Fibonacci Sequence, Knapsack Problem.
5. Backtracking Algorithm
- Tries different solutions and backtracks when a solution is not valid.
- Example: N-Queens Problem, Sudoku Solver.
6. Randomized Algorithm
- Uses random numbers to solve problems efficiently.
- Example: Quick Sort (Randomized Pivot Selection), Monte Carlo Method.
Algorithm Analysis (Time & Space Complexity)
1. Time Complexity
- Measures the number of steps an algorithm takes relative to input size (n).
- Expressed using Big-O Notation:
- O(1) → Constant Time (e.g., Accessing an array element).
- O(log n) → Logarithmic Time (e.g., Binary Search).
- O(n) → Linear Time (e.g., Linear Search).
- O(n log n) → Log-Linear Time (e.g., Merge Sort).
- O(n²) → Quadratic Time (e.g., Bubble Sort).
2. Space Complexity
- Measures the memory required by an algorithm.
- Includes input storage, auxiliary space, and recursive stack space.
Example of an Algorithm
Algorithm: Find the Largest Number in an Array
pythonCopyEditdef find_max(arr): max_value = arr[0] # Assume first element is the largest for num in arr: if num > max_value: max_value = num return max_value arr = [10, 25, 5, 80, 45]print(find_max(arr)) # Output: 80
✅ Time Complexity: O(n) (Linear Time).
✅ Space Complexity: O(1) (Constant Space).
Real-World Applications of Algorithms
- Search Engines → Google Search uses PageRank Algorithm.
- Social Media → Facebook & Instagram use recommendation algorithms.
- Cybersecurity → Encryption algorithms secure data.
- E-commerce → Amazon uses algorithms for product recommendations.
- Navigation Systems → Google Maps uses shortest path algorithms.
