# Understand Data Structures in C and C++

To become a proficient programmer, it is important to have an understanding of data structures.

A data structure is a collection of data values, the relationships among them, and the functions or operations that can be applied to the data. Some sort of data structure is used in almost every program. Also, it is common for programmer interview questions to be based on data structures.

We've released a video course on the freeCodeCamp.org YouTube channel that will teach you about data structures and how to implement them in C or C++.

The course was developed by Harsha and Animesh from MyCodeSchool. MyCodeSchool is one of the oldest software channels on YouTube. Animesh currently works as an engineer on Google's search team. Harsha was the highest ranked Indian programmer on the Top Coder competitive programming platform.

MyCodeSchool has an inspiring and sad story. You can read about it here in this article written by Quincy Larson.

Here are the topics covered in this course:

- Introduction to data structures
- List as abstract data type
- Introduction to linked list
- Arrays vs linked lists
- Linked list - implementation in C/C++
- Linked list in C/C++ - inserting a node at beginning
- Linked list in C/C++ - insert a node at nth position
- Linked list in C/C++ - delete a node at nth position
- Reverse a linked list - iterative method
- Print elements of a linked list in forward and reverse order using recursion
- Reverse a linked list using recursion
- Introduction to doubly linked list
- Doubly linked list - implementation in C/C++
- Introduction to stack
- Array implementation of stacks
- Linked list implementation of stacks
- Reverse a string or linked list using stack.
- Check for balanced parentheses using stack
- Infix, prefix and postfix
- Evaluation of prefix and postfix expressions using stack
- Infix to postfix using stack
- Introduction to queues
- Array implementation of queue
- Linked list implementation of queue
- Introduction to trees
- Binary tree
- Binary search tree
- Binary search tree - implementation in C/C++
- BST implementation - memory allocation in stack and heap
- Find min and max element in a binary search tree
- Find height of a binary tree
- Binary tree traversal - breadth-first and depth-first strategies
- Binary tree: level order traversal
- Binary tree traversal: preorder, inorder, postorder
- Check if a binary tree is binary search tree or not
- Delete a node from binary search tree
- Inorder successor in a binary search tree
- Introduction to graphs
- Properties of graphs
- Graph representation part 01 - edge list
- Graph representation part 02 - adjacency matrix
- Graph representation part 03 - adjacency list

**You can watch the entire course on the freeCodeCamp.org YouTube channel (10-hour watch).**