Sorry, this page is no longer available
We may earn an affiliate commission when you visit our partners.
Course image
Kamran Ahmed

Data Structures are an essential topic for developers. All kinds of software and programs we write heavily rely on data and data structures in one way or another. Having a good understanding of data structures is going to be helpful in building robust applications.

Read more

Data Structures are an essential topic for developers. All kinds of software and programs we write heavily rely on data and data structures in one way or another. Having a good understanding of data structures is going to be helpful in building robust applications.

In this free illustrated course, you will learn everything you need to know about Data Structures. We will start with the introduction to the data structures, understanding what they are, why we need them, what are the most common data structures and why picking the right data structure is important. With that out of the way, we will learn about the common data structures i.e. Arrays, Linked Lists, Stacks, Queues, Hash Tables, Trees, Heaps, and Graphs. For each of these data structures, we will first learn what the data structure is about, we will look behind the scenes to understand how it works, we will understand the common operations which can be performed on the given data structure, common use cases, and the complexity of different operations on that data structure.

This course also comes with an extra video to give you an introduction to algorithms, algorithmic complexities, common algorithmic complexities, and a comparison between each.

Enroll now

What's inside

Syllabus

Learn what data structures are and why do we need them.

Data structures are the in-memory representation of data. In this first video of the series, we will be looking at the introduction to data structures to understand:

  • What are Data Structures?

  • What are the different types of Data Structures?

  • Why do we need Data Structures?

  • What are some common Data Structures?


Read more

An array is a collection of items where items are stored consecutively. This video will discuss everything you need to know about the array data structure. We start with the introduction to the array data structure, then we discuss how they work in memory. We learn the limitations and see an example of arrays in languages such as C++; after that, we see how the languages such as JavaScript, PHP, or Ruby implement the arrays to go around the limitations of fixed size and single type array values, and then finally we learn about the different operations you can perform on arrays along with the algorithmic complexity. After watching this video, you can answer the following questions:

  • What are arrays?

  • How do the arrays work?

  • What are some of the limitations of arrays?

  • How can languages such as JavaScript have dynamically sized arrays and mixed-type values?

  • What are some of the operations you can perform on an array?

  • What is the algorithmic complexity of those operations?

Linked List is a linear collection of elements where each element points to the next element in the list. In this video, we learn everything about linked lists. We will be learning about what the linked lists are, how they work, what different operations you can perform on the linked list data structure, different types of linked lists, the difference between linked lists and arrays, algorithmic complexity of different linked list operations, and the implementation of Linked List in JavaScript. After watching this video, you will be able to answer the following questions:

  • What is Linked List?

  • How do the Linked Lists work?

  • What are the types of Linked Lists?

  • What are the operations you can perform on Linked List?

  • What is the difference between Linked List and Array?

  • What are Linked Lists good at?

  • What are Linked Lists not good at?

Stack is a linear collection of items where items are inserted and removed in a particular order. Stack is also called a LIFO Data Structure because it follows the "Last In First Out" principle, i.e., the item that is inserted in the last is the one that is taken out first. In this video, we look at the stack, how it is implemented, the different operations you can perform on a stack, and some real-world usages of Stack. After watching this video, you will be able to answer the following questions:

  • What is Stack Data Structure?

  • What is LIFO principle?

  • What are different operations you can perform on a Stack?

  • What are some usage examples of Stack?

  • How to implement stack in JavaScript?

Queue is a linear collection of items where items are inserted and removed in a particular order. The queue is also called a FIFO Data Structure because it follows the "First In, First Out" principle, i.e., the item that is inserted in the first is the one that is taken out first. In this video, we look at the queue, how it is implemented, what different operations you can perform on a queue, and the implementation of Queue in JavaScript. After watching this video, you will be able to answer the following questions:

  • What is Queue Data Structure?

  • What is FIFO principle?

  • What are different operations you can perform on a Queue?

  • How to implement stack in Queue?

Hash Table, Map, HashMap, Dictionary, or Associative are all the names of the same data structure. It is one of the most commonly used data structures. This video will cover everything you need to know about hash tables. After watching this video, you will be able to answer the following questions:

  • What is a hash table?

  • How does the hash table work?

  • How to implement hash table in JavaScript.

  • Performance of a hash table.

  • What is a hashing function?

  • How to handle collisions in hash tables?

  • What is separate chaining?

So far in this course, we have looked at arrays, linked lists, stacks, queues, and hash tables, all of which were linear data structures. In this illustrated explanation, we learn about the hierarchical data structure of trees. We cover the basics of trees, some real-world usage of tree data structure, different types of trees, different operations you can perform on the tree data structure and their complexity, and how to traverse a tree. After watching this video, you will be able to answer the following questions:

  • What is a hierarchical data structure?

  • What is a tree data structure?

  • What are nodes, edges, leaf nodes, root nodes, parent nodes, and grandparent nodes in trees?

  • How to calculate tree height?

  • How to calculate the node height?

  • What are the different types of tree data structures?

  • What is the difference between a binary tree and a binary search tree?

  • What are the properties of a binary search tree?

  • How do we search for elements in a tree?

  • How to insert elements in a tree?

  • What is the complexity of search and insert operations in trees?

  • What's the difference between Balanced and Unbalanced Trees?

  • How to traverse a tree?

  • Difference between pre-order, in-order, and post-order tree traversal.

Heap is a tree-based data structure that follows the properties of a complete binary tree and is either a Min Heap or a Max Heap. In this video, we will be covering the different types of Binary Tree, the difference between a Full Binary Tree and a Complete Binary Tree, what the heap data structure is, the difference between Min Heap and Max Heap, and different operations you can perform on a heap, algorithmic complexity of heap operations and uses of heap data structure.

A graph is a set of vertices connected through edges. In this video, we learn everything you need to know about Graph Data Structure. After watching this video, you will be able to answer the following questions:

  • What is graph data structure?

  • What is the difference between directed and undirected graphs?

  • What is a path in a graph data structure?

  • What is a closed path in a graph data structure?

  • What is a simple path in a graph data structure?

  • What is a loop in graph data structure?

  • What is the degree of a node?

  • How to calculate the degree of a node in the directed graph?

  • How to calculate the degree of a node in an undirected graph?

  • What is a cycle graph?

  • What is a connected graph?

  • What is a disconnected graph?

  • What is a complete graph?

  • What is a weighted graph?

  • What is a simple graph?

  • How to represent a graph using an adjacency matrix?

  • How to represent a graph using an adjacency list?

  • What are the use cases of graph data structure?

Given below is the list of points you should keep in mind while picking up the programmatic representation of a graph:

Adjacency Matrix:

  • Removal of an edge can be done in a constant time.

  • Addition of an edge can be done in a constant time.

  • Edges can be queried in constant time O(1)

  • Removal of vertex has quadratic complexity O(n²)

  • Addition of vertex has quadratic complexity O(n²)

  • Space complexity is quadratic O(n²)

Adjacency List:

  • Space complexity is linear O(n)

  • Adding a vertex takes constant time O(1)

  • Adding an edge takes constant time O(1)

  • Removing a vertex takes linear time O(n)

  • Removing an edge takes linear time O(n)

  • Querying is linear O(n)

In this video, we look at the algorithmic complexity or asymptotic notation, learn to measure it for any algorithm, and look at some of the common algorithmic complexities. After watching this video, you will be able to answer the following questions:

  • What is an Algorithm?

  • What is Algorithmic Complexity?

  • What are Time Complexity and Space Complexity?

  • How to measure Time Complexity?

  • How to measure Space Complexity?

  • What are Big O, Big Omega, and Big Theta notations?

  • Why are we most interested in Big O notation over the others?

  • What is Linear complexity?

  • What is Quadratic complexity?

  • What is Constant Complexity?

  • What is Exponential Complexity?

  • What is Logarithmic Complexity?

  • What is the complexity that you should aim for?

Traffic lights

Read about what's good
what should give you pause
and possible dealbreakers
Provides an introduction to algorithmic complexity, which is essential for evaluating the efficiency of different data structures and algorithms, and is a core concept in computer science
Explores common data structures like arrays, linked lists, stacks, and queues, which are fundamental building blocks for developing efficient and well-organized software applications
Covers hash tables, trees, heaps, and graphs, which are essential for solving complex problems in computer science and software engineering, such as searching, sorting, and data management
Includes implementation examples in JavaScript, which allows learners to directly apply the concepts learned to practical coding scenarios and build a strong foundation in data structures
Requires learners to understand the common operations that can be performed on each data structure, which is essential for choosing the right data structure for a given problem
Teaches the algorithmic complexity of different operations on each data structure, which is crucial for optimizing code and improving the performance of software applications

Save this course

Create your own learning path. Save this course to your list so you can find it easily later.
Save

Reviews summary

Foundation in core data structures

According to learners, this course provides a solid introduction to essential data structures. Many appreciate the clear and illustrative explanations which make complex topics accessible. Students highlight the coverage of fundamental concepts like Arrays, Linked Lists, Trees, and Hash Tables, along with an introduction to algorithmic complexity (Big O). While some more experienced learners find the course basic, it is widely regarded as excellent for beginners looking to build a foundational understanding before tackling more advanced topics or interview preparation.
Strong emphasis on understanding how things work.
"I liked the focus on understanding the 'why' and 'how' behind each data structure."
"The look 'behind the scenes' of how data structures work in memory was very insightful."
"Understanding the operations and their complexity (Big O) was well explained."
"It's more theoretical and foundational than practical coding exercises, which was good for understanding the concepts."
Comprehensive overview of key data structures.
"The course covers all the essential data structures I needed to learn like arrays, lists, stacks, queues, trees, and graphs."
"I appreciate the dedicated modules for each data structure and algorithmic complexity."
"Getting an overview of how different data structures work in languages like JS was helpful."
"It touches upon the most common data structures you encounter in programming."
Excellent starting point for newcomers.
"This course is perfect for someone like me who is just starting out with data structures."
"As a beginner, I found the pace and depth just right to build confidence."
"If you have no prior knowledge, this course is an ideal introduction."
"It lays a really strong foundation for understanding the basics."
Concepts are explained very clearly.
"The way the instructor explains each data structure is very clear and easy to follow."
"I finally understood how Hash Tables work under the hood thanks to the illustrative approach."
"The examples provided really helped clarify the concepts presented in the lectures."
"The explanations make complex topics like Trees and Graphs much more understandable."
May be too basic for experienced learners.
"While good for beginners, I found this course lacked the depth I was hoping for as an intermediate programmer."
"I already knew most of the topics covered; it didn't challenge me much."
"Could use more complex examples or discussions on optimization techniques."
"If you're preparing for coding interviews, this is just the very first step."

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Data Structures: An Illustrative Introduction with these activities:
Review Basic Programming Concepts
Reinforce fundamental programming concepts like variables, loops, and functions to better understand the implementation of data structures.
Browse courses on Variables
Show steps
  • Review online tutorials on basic programming concepts.
  • Complete practice exercises on variables and loops.
  • Write simple programs using conditional statements and functions.
Create a Data Structure Comparison Chart
Reinforce your understanding by creating a visual chart comparing the different data structures based on their properties, operations, and complexities.
Show steps
  • List the data structures covered in the course.
  • Compare them based on time complexity for various operations.
  • Compare them based on space complexity.
  • Summarize the advantages and disadvantages of each data structure.
Review 'Introduction to Algorithms' by Cormen et al.
Gain a deeper understanding of algorithms and their complexities, which are crucial for efficient data structure implementation.
Show steps
  • Read the chapters related to arrays, linked lists, and trees.
  • Study the pseudocode examples for common data structure operations.
  • Try implementing the algorithms in your preferred programming language.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Review 'Data Structures and Algorithms in Python' by Goodrich et al.
Explore Python implementations of data structures and algorithms to enhance your understanding and coding skills.
Show steps
  • Read the chapters corresponding to the data structures covered in the course.
  • Analyze the Python code examples provided in the book.
  • Adapt the code examples to solve similar problems.
Implement Data Structures from Scratch
Solidify your understanding by implementing arrays, linked lists, stacks, queues, hash tables, trees, heaps, and graphs without using built-in libraries.
Show steps
  • Choose a programming language (e.g., Python, Java, C++).
  • Implement each data structure with its basic operations (insert, delete, search).
  • Test your implementations thoroughly with various test cases.
Build a Simple Application Using Data Structures
Apply your knowledge by building a real-world application that utilizes various data structures, such as a contact management system or a simple game.
Show steps
  • Choose a project that requires the use of multiple data structures.
  • Design the application architecture and data flow.
  • Implement the application using appropriate data structures.
  • Test and debug the application thoroughly.
Solve LeetCode Problems on Data Structures
Improve your problem-solving skills by tackling LeetCode problems related to arrays, linked lists, trees, and other data structures.
Show steps
  • Select LeetCode problems tagged with relevant data structures.
  • Attempt to solve the problems independently.
  • Analyze the solutions and optimize your code.

Career center

Learners who complete Data Structures: An Illustrative Introduction will develop knowledge and skills that may be useful to these careers:
Software Developer
A software developer designs, develops, and tests software applications. This course helps build a foundation in data structures, which are fundamental to writing efficient and effective code. Understanding arrays, linked lists, stacks, queues, hash tables, trees, heaps, and graphs, as covered in the course, allows the software developer to choose the appropriate data structure for a given task, optimizing performance and memory usage. In particular, the course's discussion of algorithmic complexity may be useful for understanding the performance implications of different data structure choices. A future software developer should take this course to better develop robust applications.
Algorithm Engineer
An algorithm engineer designs and implements algorithms for various applications, often focusing on optimization and efficiency. This course can be quite helpful, providing a solid understanding of fundamental data structures that are building blocks for complex algorithms. The course covers arrays, linked lists, stacks, queues, hash tables, trees, heaps, and graphs, equipping the algorithm engineer with the knowledge to select the optimal data structure for specific algorithmic tasks. The course's deep dive into algorithmic complexity will be especially useful for analyzing and improving algorithm performance. Aspiring algorithm engineers should consider this course to sharpen their skills in designing high-performance algorithms.
Mobile App Developer
A mobile app developer designs, develops, and tests applications for mobile devices. This course helps build a solid foundation in data structures, which are crucial for creating efficient and responsive mobile apps. The course explores arrays, linked lists, stacks, queues, hash tables, trees, heaps, and graphs, enabling the mobile app developer to choose the right data structure for a given task and optimize performance on resource-constrained devices. This course's treatment of algorithmic complexity can be especially useful when optimizing app performance. If you wish to develop mobile applications, take this course to learn techniques which are useful on mobile.
Machine Learning Engineer
A machine learning engineer develops and deploys machine learning models. The engineer needs a strong understanding of data structures to efficiently process and manage the large datasets used in machine learning. This course helps build a foundation in data structures, including arrays, linked lists, stacks, queues, hash tables, trees, heaps, and graphs, which are essential for implementing machine learning algorithms. Also, the course's treatment of algorithmic complexity is useful for optimizing model performance. A machine learning engineer should take this course to better build the models needed for the future.
Game Developer
A game developer creates video games, often working with complex data structures to manage game objects, environments, and logic. This course is useful for game developers, providing a strong foundation in essential data structures. The course's coverage of arrays, linked lists, stacks, queues, trees, and graphs enables the game developer to efficiently manage game data and implement game mechanics. In particular, the course's discussion of graphs can be helpful for pathfinding and AI, while the lessons on trees may be useful for level design. The treatment of algorithmic complexity helps optimize game performance. Those interested in working in game development should take this course to better design game architectures.
Embedded Systems Engineer
An embedded systems engineer designs and develops software for embedded systems, which are often resource-constrained. This course helps provide a solid foundation in data structures. The course's coverage of arrays, linked lists, stacks, queues, hash tables, trees, heaps, and graphs can aid in optimizing memory usage and performance. The discussion of algorithmic complexity will be particularly useful for developing efficient algorithms. If an embedded systems engineer takes this course, they may find themselves better-equipped to manage the constraints of this field.
Data Scientist
A data scientist analyzes large datasets to extract meaningful insights and create predictive models. This course may be useful because it covers essential data structures that are used in data manipulation and analysis. The course's exploration of arrays, linked lists, and hash tables can help a data scientist efficiently store, access, and process data. Moreover, the course's discussion of trees and graphs may be useful for modeling complex relationships in data. Understanding algorithmic complexity, also covered in this course, aids in optimizing data processing algorithms. A data scientist should consider taking this course to build a strong foundation for data analysis work.
Full-Stack Developer
A full stack developer works on both the front-end and back-end of web applications. This course will be useful, as its coverage of data structures is relevant to both aspects of full stack development. The course's exploration of arrays, linked lists, stacks, queues, hash tables, trees, heaps, and graphs can help a full stack developer efficiently manage data and implement features on both the client-side and server-side. Moreover, the course's discussion of algorithmic complexity can be useful for optimizing application performance. A full stack developer who takes this course will develop a stronger sense of building applications from end to end.
Web Developer
A web developer builds and maintains websites and web applications. This course helps provide a strong understanding of data structures, which are essential for efficient web development. The course covers data structures such as arrays, linked lists, hash tables, stacks, and queues, which are used extensively in web development for managing data and implementing features. The course's discussion of algorithmic complexity helps a web developer write efficient code that can handle large amounts of data without slowing down the website. A web developer considering this course may find that it will help them grow in their capabilities.
Backend Developer
A backend developer is responsible for the server-side logic and databases that power web applications. This course helps provide a strong understanding of data structures, which are essential for building efficient and scalable backend systems. The course covers arrays, linked lists, stacks, queues, hash tables, trees, heaps, and graphs, which are used extensively in backend development for managing data and implementing business logic. The course's discussion of algorithmic complexity will help a backend developer write performant code that can handle large amounts of traffic. This course may be useful for backend developers.
Database Administrator
A database administrator is responsible for managing and maintaining databases, ensuring data integrity, security, and availability. This course may be useful, as it provides a good understanding of data structures that underpin database systems. The course's exploration of arrays, linked lists, hash tables, trees, and graphs helps a database administrator understand how data is organized and accessed within a database. The course's discussion of algorithmic complexity may be useful for optimizing database queries and operations. Those interested in becoming database administrators may find that this course offers valuable insights into the inner workings of database systems.
Technical Lead
A technical lead guides and mentors a team of developers, making key technical decisions. This course may be useful by providing a deeper understanding of data structures, which are fundamental to software development. The course's coverage of arrays, linked lists, stacks, queues, hash tables, trees, heaps, and graphs provides a strong foundation for evaluating different architectural choices and guiding the team in selecting the appropriate data structures for various tasks. The discussion of algorithmic complexity provides insight into optimizing performance and scalability. A technical lead may find this helpful.
Data Analyst
A data analyst collects, cleans, and analyzes data to identify trends and insights that can inform business decisions. This course may be useful, as the data structures covered are fundamental to data manipulation and analysis. The course's exploration of arrays, linked lists, and hash tables can help a data analyst efficiently store, access, and process data. The course's discussion of algorithmic complexity can also be useful for optimizing data processing tasks. A data analyst may find that the skills learned in this course will help them perform their work more efficiently.
Quality Assurance Engineer
A quality assurance engineer tests software to ensure it meets quality standards and functions correctly. Often, a quality assurance engineer will need to understand the software's underlying data structures to develop effective test cases. This course helps build a foundation in data structures, including arrays, linked lists, stacks, queues, hash tables, trees, heaps, and graphs, which can aid in designing comprehensive tests. In particular, the course's discussion of algorithmic complexity may be useful for evaluating the performance of different software components. Many working in the field of quality assurance may find this course helpful.
DevOps Engineer
A DevOps engineer automates and streamlines software development and deployment processes. This course may be useful because data structures play a role in managing configurations, infrastructure, and deployment pipelines. The course's exploration of arrays, linked lists, and hash tables can help a DevOps engineer efficiently store and retrieve configuration data. The course's discussion of algorithmic complexity may also be useful for optimizing automation scripts. Overall, a DevOps engineer who wishes to expand their skillset may find that this course will lead to new career insight.

Reading list

We've selected two books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Data Structures: An Illustrative Introduction.
Comprehensive textbook on algorithms and data structures. It covers a wide range of topics, including arrays, linked lists, stacks, queues, hash tables, trees, heaps, and graphs, all of which are covered in the course. It provides rigorous analysis and clear explanations, making it suitable for both beginners and advanced learners. This book is often used as a primary textbook in university-level algorithms courses.
Provides a Python-centric approach to understanding data structures and algorithms. It offers practical examples and code snippets that can be directly applied. It is helpful in providing background and prerequisite knowledge. It is also commonly used as a textbook at academic institutions.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Similar courses are unavailable at this time. Please try again later.
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2025 OpenCourser