##### About the course

The aim of this course is to introduce you to the fundamentals of Data Structures, abstract concepts, and how these concepts are useful in problem-solving. This course covers in detail the design and analysis of algorithms along with the basics of C++ programming language including elementary data structures such as arrays and linked lists, abstract data types like stacks, queues, and trees. It also provides you an exposure to various searching and sorting techniques along with their performance analysis.

**Learning Outcomes**

After completing this course, you will be able to:

- Understand the basics of C++ programming language
- Understand the object-oriented programming concepts like Inheritance, abstraction, polymorphism etc
- Develop algorithms and analyze them step by step to solve real-world problems
- Implement various data structures such as arrays, linked lists, stacks, queues, trees and graphs in your programs
- Perform search and sort operations to filter data by utilizing different searching and sorting techniques

##### Target Audience

The course can be taken by:

**Students:** All students who are pursuing any technical/professional courses related to computer science / Information Technology.

**Teachers/Faculties:** All computer science teachers/faculties who wish to acquire new skills.

**Professionals:** All IT professionals, who wish to upgrade their skills.

##### Why learn Java?

Data structures and algorithms are some of the most essential topics for programmers, both to get a job and to do well on a job. Good knowledge of data structures and algorithms is the foundation of writing good code. If you are familiar with essential data structures like an array, stack, queue, linked list, tree, graph, map, etc, then you will know when to use which data structure and compute the CPU and memory cost of your code. Even though you don’t need to write your own array, linked list, or hashtable, given every major programming SDK provides them, e.g. JDK or C++ STL library, you will need to understand them so that you can use them in the right place.

Ideally, data structures and algorithms should be learned in schools and colleges, but it’s rarely ever covered. Most of the programmers, only get introduced to a data structure in our computer science courses, but they don’t really learn the real-world importance of them, and that’s why they don’t understand them better. For them, they are just the algorithms and data structures e.g. some concept, not a tool that you can use to write good programs. Do you know that Facebook uses them to store our details and Google uses them to store web pages and link to search queries? That is why it is very important to have a working knowledge of data structures in order to become a successful IT/software professional.

##### Course Features

**24X7 Access:**You can view lectures as per your own convenience.**Online lectures: ~**16 hours of online lectures with high-quality videos.**Updated Quality content:**Content is the latest and gets updated regularly to meet the current industry demands.

**Test & Evaluation**

1. During the program, the participants will have to take all the assignments given to them for better learning.

2. At the end of the program, a final assessment will be conducted.

**Certification**

1. All successful participants will be provided with a certificate of completion.

2. Students who do not complete the course / leave it midway will not be awarded any certificate.

##### Topics to be covered

###### Unit -1 Analysis of Algorithm

- Learning objectives
- Introduction
- Goals of this courses
This is only a demo course. The full course can be bought here

- Need for Data Structures
- Structure: how data is organized
- ADT
- Design and analysis of algorithm: Algorithms definition
- Algorithm Properties
- Big Oh Notation
- Functions in order of increasing growth rate
- Examples of Algorithm Running Times
- Brute Force Algorithm
- O(N2) algorithm
- O(N) algorithm
- General Big-Oh Rules
- Mathematical Expression related to rate of growth
- Various growth rates
- Worst-case vs. Average-case
- Static Searching problem
- Limitations of Big-Oh Analysis
- Statistics (function calls)
- Top down vs. Bottom up
- Examples of Dynamic Programming Algorithms
- A framework to solve Optimization problems
- Elements of Dynamic Programming
- Development of a dynamic programming algorithm
- Binomial Formulas
- Frequency Count
- Complexity Classes
- Space Complexity
- Structured Programming
- Conclusion

###### Unit -2 Basic of C++, Elementary Data Structures: Arrays, Linked Lists

- Learning objectives
- Basics of C++
- Basic Syntax
- C++ Program Structure
- Compile & Execute C++ Program
- C++ Identifiers
- Trigraphs
- Whitespace in C++
- Comments in C++
- Data Types
- Variables
- Constants
- Modifiers
- Type Qualifiers in C++
- Storage Classes in C++
- Operators
- C++ Basic Input & output
- C++ Loop Types
- C++ Decision Making
- Functions
- Arrays
- Strings
- Pointers
- Object Oriented Programming - C++ Classes and Objects
- Object Oriented Programming - Encapsulation
- Object Oriented Programming - Abstraction
- Object Oriented Programming - Inheritance
- Object Oriented Programming - Polymorphism
- Object Oriented Programming - Overloading
- Representation of Array
- Dimensional Arrays
- Search
- Insert
- Remove
- Sparse Polynomial Representation and Addition
- Stack Implementation of Array
- Queue Implementation using Array
- Stack using Linked list in C++ and Implementation
- Circular Linked List
- Algorithm for Creating Circular Linked List
- Using Array
- Priority Queues
- Application of Stack
- Pointers - What Are Pointers?
- Singly Linked List
- Linked Stacks and Queues: Stack - What is Stack?
- Polynomial Representation and Manipulation using Linked Lists
- Circular Linked List
- Doubly Linked Lists
- Conclusion

###### Unit -3 Abstract Data types Stacks and Queues

- Learning objectives
- Definition of ADT
- Stack ADT-Implementation
- Stack
- Array Implementation
- Stack Class
- Constructor and Destructor
- Stack Header File
- Stack ADT
- STL Class Stack
- C++ Run Time Stack
- Array-based Stack
- Stack Applications
- FIFO queue ADT-Queue
- Implementation of Queue
- Circular Arrays
- Empty Queue & Full Queue
- Queue Class
- Front & Rear
- Constructor & Destructor
- Priority Queue
- Dequeue
- Application of Queues
- Designing a Queuing System
- Customer
- Server
- Waiting Customers Queue
- Conclusion

###### Unit -4 Trees

- Learning objectives
- Introduction
- Copy Tree
- Binary Tree Traversal
- Tree Traversal Example
- Sorting Values Using In-Order
- Binary Search Tree: Operations on BST
- Binary Search Trees
- Searching for a key
- The Maximum and the Minimum
- The Successor and the Predecessor
- Search
- Insert
- Delete
- Non recursive Binary Tree Traversal Algorithms
- Binary Tree Traversal and Functions as Parameters
- Representations & Applications
- A Class for Binary Tree Nodes
- A More General BTNode
- Binary Search Trees
- Heaps
- Trees Representation
- AVL (Height-Balanced) Trees
- Insertion
- Conversion of Forest into Tree
- AVL Tree Rotations
- Deletion from AVL Trees
- Analysis: AVL Trees
- B-Trees
- Conclusion

###### Unit -5 Searching, Sorting and Complexity

- Learning objectives
- Selection Sort
- Insertion Sort
- Bubble Sort
- Quick Sort
- Merge Sort
- Heap Sort
- Radix Sort
- Binary Search
- Binary search tree
- Balanced Binary Tree
- AVL tree
- B Tree Searching operation
- Index Searching
- Search Algorithms
- Hashing
- Collision Resolution
- Open Addressing
- Separate Chaining
- Comparisons of Sorting Algorithm
- Conclusion

###### Unit -6 Graphs

- Learning objectives
- Graph representation-Introduction
- Traversal Schemes
- Spanning Tree: Definition
- Conclusion