So you’ve worked with the basics of data structures and algorithms in Java (or another OO programming language) but feel like you need a deeper knowledge of how things work.

Maybe you have taken other courses on this topic that focus more on teaching how to pass job interview tests (theory) instead of how to make good choices for the programs you develop (implementation).

Or maybe you are ready to move from a junior programming position to a more senior one and need to get skilled in advanced concepts like data structures, and how to apply them to your own projects.

Whatever the reason, if you are looking for a course that focus on the implementations to give you a complete understanding of how things work, then this is the course for you.

This course goes over the theory of how things work, but only to give you what you need to know to understand the implementation covered.

**Complete source code is included and available for you to download.**

This is a hands-on course! If you want to try understand things at a deep level, and work on implementations, rather than theory, then again, this is the course for you.

Topics covered:-

Arrays

Linked Lists

Trees

Hashtables

Stacks

Queues

Heaps

Sort algorithms

Search algorithms

The course also spends more time than most other courses of its kind looking at what’s available in the JDK. Students wanting to understand how things work “under the hood” will benefit enormously from this course.

**Why learn about data structures and algorithms?**

The reality is, the more you learn about data structures and algorithms, the better a programmer you become.

Why?

Because, data structures and algorithms are effectively patterns for solving problems. You want to add as many of them as you can to your skill-set. By doing so, you will find you solve more problems, and use the right tools for the job, in a more elegant way. And you will learn a heap of them in this course.

**Why enrolling in this course is the best decision you can make.**

Your instructor, Sarah Ettritch has over 25 years’ software development experience and has been working with Java since JDK 1.1. She has spent many years creating tools used by developers, which required a deep knowledge of data structures and algorithms, and is perfectly qualified to teach this course.

Most courses focus on giving you the theory of how things work, so that you can take an interview. Whilst the theory is important, the knowledge of how to implement these data structures and algorithms are of vital importance.

This course goes over the theory of how things work, but only to give you what you need to know to understand the implementation covered. The main focus of the course is to give you a real understanding of how things work under the hood, so that you can apply this to future programming projects.

If you want to actually understand how things work, and be able to take that understanding and apply it to your own programs, then this course is for you.

**After completing this course, you will have a solid understanding of data structures and algorithms (both the theory, and the implementation).**

The sooner you sign up for this course, the sooner you will have the skills and knowledge you need to increase your job or consulting opportunities. Java developers with key skills and understanding of data structures and algorithms are in high demand and get paid extremely well.

If you are ready for that new job promotion or consulting opportunity, it’s time to get started.

Why not get started today?

Click the **Signup** button to sign up for the course

### Introduction

In this video, you'll learn what we'll cover in the course.

In this video, you'll learn what a data structure is and why there are many of them.

**In this video, you'll learn what an algorithm is**.

### Arrays and Big-O Notation

In this video, you'll learn about what we'll cover in this section.

In this video, you'll learn about big-O notation.

In this video, we'll quickly review arrays in Java.

In this video, we'll take a look at arrays as a data structure.

In this video, we'll take a look at the Big-O values for array operations.

### Sort Algorithms

In this video, you'll learn what we'll cover in this section.

In this video, you'll learn how the bubble sort algorithm works.

In this video, we'll implement the bubble sort algorithm.

In this video, you'll learn about stable and unstable sort algorithms.

In this video, you'll learn how the selection sort algorithm works.

In this video, we'll implement the selection sort algorithm.

In this video, you'll learn how the insertion sort algorithm works.

In this video, we'll implement the insertion sort algorithm.

In this video, you'll learn how the shell sort algorithm works.

In this video, we'll implement the shell sort algorithm.

In this video, we'll review recursion and what happens when we call recursive methods.

In this video, you'll learn how the merge sort algorithm works.

In this video, we'll implement the merge sort algorithm.

In this video, you'll learn how the quick sort algorithm works.

In this video, we'll implement the quick sort algorithm.

In this video, you'll learn how the unstable counting sort algorithm works.

In this video, we'll implement the unstable counting sort algorithm.

In this video, you'll learn how the radix sort algorithm works.

In this video, you'll learn how to perform a stable counting sort.

In this video, we'll implement the radix sort algorithm.

In this video, we'll take a look at JDK methods you can use to sort arrays.

In this video, you'll practice what you've learned about the merge sort algorithm.

In this video, we'll go over the solution to the first challenge.

In this video, you'll practice what you've learned about recursion.

In this video, we'll go over the solution to the second challenge.

In this video, you'll practice what you've learned about the shell sort and bubble sort algorithms.

In this video, we'll go over the solution to the third challenge.

### Lists

In this video, we'll take a look at the List interface and what we'll cover in this section.

In this video, you'll learn about abstract data types.

In this video, we'll take a look at the java.util.ArrayList class.

In this video, we'll take a look at the java.util.Vector class.

In this video, you'll learn about the singly linked list data structure.

In this video, we'll implement a singly linked list.

In this video, you'll learn about the doubly linked list data structure.

In this video, we'll implement a doubly linked list.

In this video, we'll take a look at the java.util.LinkedList class.

In this video, you'll practice what you've learned about doubly-linked lists.

In this video, we'll go over the solution to the first challenge.

In this video, you'll practice what you've learned about singly-linked lists.

In this video, we'll go over the solution to the second challenge.

### Stacks

In this video, you'll learn about what we'll cover in this section.

In this video, you'll learn about the stack abstract data type.

In this video, we'll code a stack implementation that uses a backing array.

In this video, we'll code a stack implementation that uses a linked list.

In this video, you'll practice what you've learned about stacks

In this video, we'll go over the solution to the challenge

### Queues

In this video, you'll learn about what's coming up in the queues section.

In this video, you'll learn about the queue abstract data type

In this video, we'll implement a queue backed by an array.

In this video, we'll update our queue implementation to a circular queue.

In this video, we'll continue our implementation of a circular queue.

In this video, we'll take a look at what's available in the JDK related to queues.

In this video, you'll practice what you've learned about queues.

In this video, we'll go over the solution to the challenge.

### Hashtables

In this video, you'll learn about what's coming up in this section.

In this video, you'll learn about how hashtables work.

In this video, we'll implement a simple hashtable.

In this video, you'll learn how to handle collisions using linear probing.

In this video, you'll learn how to handle deletions when we're using linear probing.

In this video, we'll discuss two ways of completing our remove implementation.

In this video, you'll learn how to handle collisions using chaining.

In this video, we'll take a look at what's available in the JDK related to hashtables.

In this video, you'll learn about the bucket sort algorithm.

In this video, we'll implement one example of the bucket sort algorithm.

In this video, you'll practice what you've learned about hashing functions.

In this video, we'll go over the solution to the first challenge.

In this video, you'll practice what you've learned about hashtables.

In this video, we'll go over the solution to the second challenge.

### Search Algorithms

In this video, you'll learn what we'll cover in this section.

In this video, we'll implement the linear search algorithm.

In this video, you'll learn how the binary search algorithm works.

In this video, we'll implement the binary search algorithm iteratively and recursively.

### Trees

In this video, you'll learn about what we'll cover in this section.

In this video, you'll learn about trees and some terminology used to describe them.

In this video, you'll learn about binary search trees.

In this video, we'll implement inserting a value into a binary search tree.