Data Structures Easy to Advanced Course – Full Tutorial from a Google Engineer

///Data Structures Easy to Advanced Course – Full Tutorial from a Google Engineer

Data Structures Easy to Advanced Course – Full Tutorial from a Google Engineer

FavoriteLoadingAdd to favorites

Learn and master the most common data structures in this full course from Google engineer William Fiset. This course teaches data structures to beginners using high quality animations to represent the data structures visually.

Java468x60

You will learn how to code various data structures together with simple to follow step-by-step instructions. Every data structure presented will be accompanied by some working source code (in Java) to solidify your understanding.

💻 Code:

🎥 Course created by William Fiset. Check out his YouTube channel:

⭐️ Course Contents ⭐️
⌨️ (0:00:00) Abstract data types
⌨️ (0:04:28) Introduction to Big-O
⌨️ (0:17:00) Dynamic and Static Arrays
⌨️ (0:27:40) Dynamic Array Code
⌨️ (0:35:03) Linked Lists Introduction
⌨️ (0:49:16) Doubly Linked List Code
⌨️ (0:58:26) Stack Introduction
⌨️ (1:09:40) Stack Implementation
⌨️ (1:12:49) Stack Code
⌨️ (1:15:58) Queue Introduction
⌨️ (1:22:03) Queue Implementation
⌨️ (1:27:26) Queue Code
⌨️ (1:31:32) Priority Queue Introduction
⌨️ (1:44:16) Priority Queue Min Heaps and Max Heaps
⌨️ (1:49:55) Priority Queue Inserting Elements
⌨️ (1:59:27) Priority Queue Removing Elements
⌨️ (2:13:00) Priority Queue Code
⌨️ (2:28:26) Union Find Introduction
⌨️ (2:33:57) Union Find Kruskal’s Algorithm
⌨️ (2:40:04) Union Find – Union and Find Operations
⌨️ (2:50:30) Union Find Path Compression
⌨️ (2:56:37) Union Find Code
⌨️ (3:03:54) Binary Search Tree Introduction
⌨️ (3:15:57) Binary Search Tree Insertion
⌨️ (3:21:20) Binary Search Tree Removal
⌨️ (3:34:47) Binary Search Tree Traversals
⌨️ (3:46:17) Binary Search Tree Code
⌨️ (3:59:26) Hash table hash function
⌨️ (4:16:25) Hash table separate chaining
⌨️ (4:24:10) Hash table separate chaining source code
⌨️ (4:35:44) Hash table open addressing
⌨️ (4:46:36) Hash table linear probing
⌨️ (5:00:21) Hash table quadratic probing
⌨️ (5:09:32) Hash table double hashing
⌨️ (5:23:56) Hash table open addressing removing
⌨️ (5:31:02) Hash table open addressing code
⌨️ (5:45:36) Fenwick Tree range queries
⌨️ (5:58:46) Fenwick Tree point updates
⌨️ (6:03:09) Fenwick Tree construction
⌨️ (6:09:21) Fenwick tree source code
⌨️ (6:14:47) Suffix Array introduction
⌨️ (6:17:54) Longest Common Prefix (LCP) array
⌨️ (6:21:07) Suffix array finding unique substrings
⌨️ (6:25:36) Longest common substring problem suffix array
⌨️ (6:37:04) Longest common substring problem suffix array part 2
⌨️ (6:43:41) Longest Repeated Substring suffix array
⌨️ (6:48:13) Balanced binary search tree rotations
⌨️ (6:56:43) AVL tree insertion
⌨️ (7:05:42) AVL tree removals
⌨️ (7:14:12) AVL tree source code
⌨️ (7:30:49) Indexed Priority Queue | Data Structure
⌨️ (7:55:10) Indexed Priority Queue | Data Structure | Source Code

Learn to code for free and get a developer job:

Read hundreds of articles on programming:

And subscribe for new videos on technology every day:

source

By |2021-02-22T12:31:54+00:00February 22nd, 2021|Java Video Tutorials|46 Comments

46 Comments

  1. freeCodeCamp.org February 22, 2021 at 12:32 pm - Reply

    Click the "JOIN" button below the video to support freeCodeCamp.org!

  2. Zaid Ahmad February 22, 2021 at 12:32 pm - Reply

    Hey, quick question. I am in 10th currently {India} and don't know a thing about log, and all that mathematical stuff…..😅 SO should I consider learning this right now?

  3. hari krishnan February 22, 2021 at 12:32 pm - Reply

    Bookmark

  4. Mohammed Aquib February 22, 2021 at 12:32 pm - Reply

    Dear freeCodeCamp.org kindly add/enable caption/subtitles to this videos. Its sometimes hard to understand some term.Thanks

  5. Ladan February 22, 2021 at 12:32 pm - Reply
  6. Jorge p February 22, 2021 at 12:32 pm - Reply

    i can use the same concepts and principles for swift?

  7. Samarth Ahuja February 22, 2021 at 12:32 pm - Reply

    ⭐️ Course Contents ⭐️

    ⌨️ (0:00:00) Abstract data types

    ⌨️ (0:04:28) Introduction to Big-O

    ⌨️ (0:17:00) Dynamic and Static Arrays

    ⌨️ (0:27:40) Dynamic Array Code

    ⌨️ (0:35:03) Linked Lists Introduction

    ⌨️ (0:49:16) Doubly Linked List Code

    ⌨️ (0:58:26) Stack Introduction

    ⌨️ (1:09:40) Stack Implementation

    ⌨️ (1:12:49) Stack Code

    ⌨️ (1:15:58) Queue Introduction

    ⌨️ (1:22:03) Queue Implementation

    ⌨️ (1:27:26) Queue Code

    ⌨️ (1:31:32) Priority Queue Introduction

    ⌨️ (1:44:16) Priority Queue Min Heaps and Max Heaps

    ⌨️ (1:49:55) Priority Queue Inserting Elements

    ⌨️ (1:59:27) Priority Queue Removing Elements

    ⌨️ (2:13:00) Priority Queue Code

    ⌨️ (2:28:26) Union Find Introduction

    ⌨️ (2:33:57) Union Find Kruskal's Algorithm

    ⌨️ (2:40:04) Union Find – Union and Find Operations

    ⌨️ (2:50:30) Union Find Path Compression

    ⌨️ (2:56:37) Union Find Code

    ⌨️ (3:03:54) Binary Search Tree Introduction

    ⌨️ (3:15:57) Binary Search Tree Insertion

    ⌨️ (3:21:20) Binary Search Tree Removal

    ⌨️ (3:34:47) Binary Search Tree Traversals

    ⌨️ (3:46:17) Binary Search Tree Code

    ⌨️ (3:59:26) Hash table hash function

    ⌨️ (4:16:25) Hash table separate chaining

    ⌨️ (4:24:10) Hash table separate chaining source code

    ⌨️ (4:35:44) Hash table open addressing

    ⌨️ (4:46:36) Hash table linear probing

    ⌨️ (5:00:21) Hash table quadratic probing

    ⌨️ (5:09:32) Hash table double hashing

    ⌨️ (5:23:56) Hash table open addressing removing

    ⌨️ (5:31:02) Hash table open addressing code

    ⌨️ (5:45:36) Fenwick Tree range queries

    ⌨️ (5:58:46) Fenwick Tree point updates

    ⌨️ (6:03:09) Fenwick Tree construction

    ⌨️ (6:09:21) Fenwick tree source code

    ⌨️ (6:14:47) Suffix Array introduction

    ⌨️ (6:17:54) Longest Common Prefix (LCP) array

    ⌨️ (6:21:07) Suffix array finding unique substrings

    ⌨️ (6:25:36) Longest common substring problem suffix array

    ⌨️ (6:37:04) Longest common substring problem suffix array part 2

    ⌨️ (6:43:41) Longest Repeated Substring suffix array

    ⌨️ (6:48:13) Balanced binary search tree rotations

    ⌨️ (6:56:43) AVL tree insertion

    ⌨️ (7:05:42) AVL tree removals

    ⌨️ (7:14:12) AVL tree source code

    ⌨️ (7:30:49) Indexed Priority Queue | Data Structure

    ⌨️ (7:55:10) Indexed Priority Queue | Data Structure | Source Code

  8. Com Domains February 22, 2021 at 12:32 pm - Reply

    MacXcode.Com | Godaddy Auctions | 7Day Auction

  9. Nick Radford February 22, 2021 at 12:32 pm - Reply

    When performing lazy deletion in a hash table and you relocate the found item to the location of the first tombstone, the video opted to put null in the found location. Should you not instead replace the old position of the found item to be a tombstone? 5:30:00

  10. prashant dubey February 22, 2021 at 12:32 pm - Reply

    By Definition Heap is A complete tree, I think few examples given in heap section were wrong!! correct me if i am wrong.

  11. Margarita Kazakova February 22, 2021 at 12:32 pm - Reply

    i havent watched this yet, but thanks anyway, im pretty sure it will be helpful!

  12. JOHN EDWARD BINAY February 22, 2021 at 12:32 pm - Reply

    Freecodecmp…I am simply in awe in what you have accomplished in a span of time since I first saw your website, which was 5 years ago.
    Your vision and mission to teach the people with little to no cost, so that people who can't afford to learn or maybe just to make people more knowledgeable or teach important modern skills, is such an admirable thing.
    I hope you guys explore more topics soon, maybe related to computer architecture, OS, internet, IOT, robotics, etc…

  13. Hollowist February 22, 2021 at 12:32 pm - Reply

    Yeesh why does it sound like every data structure instructor sound like they normally speak at x .75 speed? They all seem so unethusiastic

  14. Awais fiaz February 22, 2021 at 12:32 pm - Reply

    Day 1 : 13:00

  15. Ananthu K Kumar February 22, 2021 at 12:32 pm - Reply

    These codes do no t have a main method how is it is supposd to run.

  16. Sushant Khara February 22, 2021 at 12:32 pm - Reply

    Thanks so much FCC for this great content for free, Thanks Quincy and FCC Team.

  17. Ananthu K Kumar February 22, 2021 at 12:32 pm - Reply

    Why is the Dynamic array code is not having main class.

  18. Alok February 22, 2021 at 12:32 pm - Reply

    Has anyone really watched this full 8 hrs video?

  19. Elbert Gonzales February 22, 2021 at 12:32 pm - Reply

    esti geloasă pagubă in ciuperci love

  20. Ivan February 22, 2021 at 12:32 pm - Reply

    Does anyone know if watching this would be enough to start doing Leetcode?

  21. Utopia Light February 22, 2021 at 12:32 pm - Reply

    Who's here for class?

  22. Wilson Wilson February 22, 2021 at 12:32 pm - Reply

    Stocks dipped Wednesday as investors awaited another batch of corporate earnings results and the Federal Open Market Committee’s (FOMC) January monetary policy decision. The S&P 500 traded lower by about 1.5%, pulling back from the index’s all-time high. The Dow also sank by more than 1%, as shares of Boeing (BA) dropped after posting a record annual loss and booking additional charges over its delayed 777X aircraft roll-out. The Nasdaq dipped even as some heavily weighted tech stocks pushed higher. Shares of Microsoft (MSFT) jumped, shares of GameStop (GME) more than doubled after closing higher by 93% a day earlier earlier. According to Popular Stock analyst Dr Rodrick Jonathan the new strain of Covid 19 virus is going to put a scare into the Stock market, for at another 3 months only the Large cap tech-related companies will keep surging because of the stay-at-home environment, which has also accelerated a number of positive tech trends, For now you can only make profit with positive trading strategy, don't panic sell, i was able to make $50,000 with $10,000 in 3 weeks with Dr Rodrick's stock trading strategy, reach him on Email: bryangreen809@gmail.com or WhatsApp: +49(1521)9263-482,

  23. WilliamFiset February 22, 2021 at 12:32 pm - Reply

    peanut butter toast

  24. Darcy Dixon February 22, 2021 at 12:32 pm - Reply

    Roses are red violets are blue if you give a like God will forgive you 0:22xx.

  25. Rodolfo Vitangcol February 22, 2021 at 12:32 pm - Reply

    Business Opportunity in Ruvol

    I have invented a Board Game [still unpublished and not yet out in the market] that I believe is guaranteed to be as challenging and exciting as CHESS. I called it “RUVOL.”

    It is my hope that one day Ruvol may surpass chess as the “Number One Board Game in the World.”

    The weakness of chess is it always starts in fixed positions that the opening moves become “memorizable.” In fact, not a few have so mastered the moves that they can play against their opponents “blindfolded.” It is for this very reason that the great Bobby Fischer introduced his so-called “Fischer Random Chess,” where the starting position of the pieces is “randomized” to make the memorization of openings impracticable. Fortunately, it is also for this reason that I invented Ruvol where “every game” has been calculated to be a challenging one to play.

    HOW IS RUVOL PLAYED and HOW YOU CAN MONETIZE IT?

    I detailed everything in my YouTube video. Here is the link: https://www.youtube.com/watch?v=jcqth0m3-R0

    BIG MONEY POTENTIAL IN RUVOL!

    It is worthwhile to note that the people who play chess will be the same people who will play Ruvol. In my Google search, I learned there are around 800 million chess players in the world. Even just a small percentage of these 800 million is good enough to earn big money from Ruvol either as an ONLINE GAME BUSINESS or as a PHYSICAL PRODUCT DISTRIBUTOR.

    You may contact me at: rodolfovitangcol@gmail.com.

    Thanks and God bless!

    RODOLFO MARTIN VITANGCOL

    The Ruvol Inventor

  26. Rodolfo Vitangcol February 22, 2021 at 12:32 pm - Reply

    Business Opportunity in Ruvol

    I have invented a Board Game [still unpublished and not yet out in the market] that I believe is guaranteed to be as challenging and exciting as CHESS. I called it “RUVOL.”

    It is my hope that one day Ruvol may surpass chess as the “Number One Board Game in the World.”

    The weakness of chess is it always starts in fixed positions that the opening moves become “memorizable.” In fact, not a few have so mastered the moves that they can play against their opponents “blindfolded.” It is for this very reason that the great Bobby Fischer introduced his so-called “Fischer Random Chess,” where the starting position of the pieces is “randomized” to make the memorization of openings impracticable. Fortunately, it is also for this reason that I invented Ruvol where “every game” has been calculated to be a challenging one to play.

    HOW IS RUVOL PLAYED and HOW YOU CAN MONETIZE IT?

    I detailed everything in my YouTube video. Here is the link: https://www.youtube.com/watch?v=jcqth0m3-R0

    BIG MONEY POTENTIAL IN RUVOL!

    It is worthwhile to note that the people who play chess will be the same people who will play Ruvol. In my Google search, I learned there are around 800 million chess players in the world. Even just a small percentage of these 800 million is good enough to earn big money from Ruvol either as an ONLINE GAME BUSINESS or as a PHYSICAL PRODUCT DISTRIBUTOR.

    You may contact me at: rodolfovitangcol@gmail.com.

    Thanks and God bless!

    RODOLFO MARTIN VITANGCOL

    The Ruvol Inventor

  27. Abhas Kumar February 22, 2021 at 12:32 pm - Reply

    Desesan egan sou

  28. Павел Бозмаров February 22, 2021 at 12:32 pm - Reply

    will this course be ok for me if I know only python, guys?

  29. Madhukiran Attivilli February 22, 2021 at 12:32 pm - Reply

    https://youtu.be/RBSGKlAvoiM?t=22319
    Fenwick tree
    LSB(i) = i & -i
    -i = 2s complement of i
    2s complement of i = 1s complement of i + 1

    example : LSB(10)
    10 = 0b00001010
    1s complement of 10 = 0b11110101
    1s complement of 10 + 1 = 0b11110110
    So -10 & 10 = 0b 0000 1010 &0b 1111 0110
    = 0b 0000 0010
    = 2^1
    = 2
    – Madhukiran

  30. Hamza Mehmood February 22, 2021 at 12:32 pm - Reply

    https://www.youtube.com/watch?v=eriPrVVD7OM&t=1426s

    This course is composed by Nazeer Muhammad (Ph.D, Hanyang University, South Korea:2010-2015). This course showcases the basic concepts of Calculus and Analytical Engineering. This is managed by FARCIM (Fachhochschule Advanced Research in Computing and Imaging Mathematics) Lab.

  31. Hamza Mehmood February 22, 2021 at 12:32 pm - Reply

    https://www.youtube.com/watch?v=eriPrVVD7OM&t=1426s

    This course is composed by Nazeer Muhammad (Ph.D, Hanyang University, South Korea:2010-2015). This course showcases the basic concepts of Calculus and Analytical Engineering. This is managed by FARCIM (Fachhochschule Advanced Research in Computing and Imaging Mathematics) Lab.

  32. Muntasir Mahmud Saif February 22, 2021 at 12:32 pm - Reply

    is this based on java?

  33. JTC INDIA February 22, 2021 at 12:32 pm - Reply

    I do want to upload my videos on this channel … How can I do that ?? Any suggestions

  34. Madhukiran Attivilli February 22, 2021 at 12:32 pm - Reply

    https://youtu.be/RBSGKlAvoiM?t=16191
    Hashtable
    Separate Chaining source code
    not sure if ur normalizeIndex() defn is correct.
    You're ignoring the sign bit and taking the rest of the value.
    But -ve values are stored in 2s complement notation.
    For example a 32bit number 1 + 30 0s + 1 is 1s complement of that (0 + 30 1s + 0) + 1 = 0 + 31 1s (coz 2s complement is 1s complement + 1). 31 1s is 2^31 -1. Hence 1 + 30 0s + 1 is -(2^31 -1). If we wanna take the absolute value, normalizeIndex should return 2^31 – 1, which would be 0 + 31 1s.
    But, ur normalizeIndex() method would return 0 + 30 0s + 1 = 1.
    I guess the normalizeIndex(keyHash) method should return the 2s complement of input parameter whenever the sign bit is 1. OR, best would be to just call abs(keyHash) or return -1 * keyHash whenever keyHash < 0.
    PLEASE COMMENT.
    – Madhukiran

  35. Madhukiran Attivilli February 22, 2021 at 12:32 pm - Reply

    https://youtu.be/RBSGKlAvoiM?t=14177
    BST
    remove() op
    I wud recommend 2 improvements to ur code :
    (1) when contains() has already located the node, why remove() has to traverse again from root! Instead, we can directly start the "remove" work from the searched node
    (2) when the searched node has both left and right subtrees — diveLeft() already gave the smallest in right subtree. We can directly remove it (using "node has only left or right subtree logic). No need to once again traverse from <searched node>.right till the <smallest nodes in right sub tree>
    – Madhukiran

  36. Madhukiran Attivilli February 22, 2021 at 12:32 pm - Reply

    https://youtu.be/RBSGKlAvoiM?t=14177
    BST
    height(node)
    the stack of recursive calls can be TREMENDOUSLY reduced with 1 additional stmt
    if(node == null) return 0;
    if(node.left == null && node.right == null) return 1; <— THIS LINE
    return max(height(node.left), height(node.right)) + 1;
    – Madhukiran

  37. Jauhar Ali February 22, 2021 at 12:32 pm - Reply

    I didn't get the for loop and if (i — rm_index) j– at https://youtu.be/RBSGKlAvoiM?t=1992

  38. Madhukiran Attivilli February 22, 2021 at 12:32 pm - Reply

    https://youtu.be/RBSGKlAvoiM?t=11001
    Path Compression w/ UnionFind DS
    Instead of Bijection (maintain a map of vertices (represented by alphabets) and numbers 1 to # of vertices), we can determine array id[] index as vertex – 'A' (which gives 0 for A, 1 for B, etc). And we can avoid maintaining this bijection map DS. Makes sense?
    – Madhukiran

  39. Madhukiran Attivilli February 22, 2021 at 12:32 pm - Reply

    Requesting to please consider my words here sportively. I'm sorry to say this but I've been finding it very tough to follow your english accent. You're not clearly pronouncing all the words in a sentence. You've been eating them up while talking. I guess you do that so to make it comfortable and smooth for u to talk. But following the technical points is becoming tough in some places, and I have to repeatedly rewind to understand what u might be saying. Additionally, the volume levels of the video are pretty low. I request you to please make these adjustments in ur future videos. Otherwise, the video content is of terrific quality and I'm grateful for that… immensely.
    – Madhukiran

  40. Madhukiran Attivilli February 22, 2021 at 12:32 pm - Reply

    https://youtu.be/RBSGKlAvoiM?t=8399
    priority queue source code
    when u r using java library's ArrayList as the dynamic array to maintain the heap, why not allow the list to expand on it's own? Instead, why r u controlling the list capacity programmatically? Won't the add() performance be poor if we increment capacity by 1 every time heap hits max capacity?
    – Madhukiran

  41. Madhukiran Attivilli February 22, 2021 at 12:32 pm - Reply

    https://youtu.be/RBSGKlAvoiM?t=8219
    Priority Queue using Binary Heap. BH using Array & Hashtable :
    create heap via heapify approach :
    The pdf has maths formula to arrive at O(n) time complexity for heapify, and is definitely impossible to understand unless one is expert in integration and other complex maths concepts.

    A simple way :
    for tree height = 3, calculate number of nodes at each level, and number of levels to sink down in worst case (sink till leaf node level), get their product, and add the products for all levels. Similarly do for height = 4 5 6 etc. And u will notice that total cost would be = n – (h+1) where n is number of nodes in the tree, and h is the tree height. So, Big-O would be O(n) as n >> h (h wud be a tiny number than n)

    – Madhukiran

  42. Jenn R February 22, 2021 at 12:32 pm - Reply

    Taking this class rn in uni.😭

  43. Madhukiran Attivilli February 22, 2021 at 12:32 pm - Reply

    https://youtu.be/RBSGKlAvoiM?t=5210
    Queue
    Don't u think it makes better sense to enqueue at the head and dequeue at the tail?
    coz in ur linked list representation the arrows are always in head -> tail direction
    arrow wud indicate the direction of enqueuing and dequeuing.
    Please comment
    – Madhukiran

  44. Cloud February 22, 2021 at 12:32 pm - Reply

    I've taken DS course in college but forgot most of it, is watching this an effective way to refresh the knowledge?

  45. Shreyansh Gupta February 22, 2021 at 12:32 pm - Reply
  46. NOVA GAMING February 22, 2021 at 12:32 pm - Reply

    I <3 it

Leave A Comment

*