# Data Structures and Algorithms with Go

The aim of this repository is to provide Gophers with how data structures and algorithms are implemented in the Go programming language. Implementations include standard library implementations as well as custom implementations (ex: Building a dynamic array from scratch)

When possible, all implementations are backed by unit tests to ensure correctness of the code. This mainly applies to the algorithms section, though, if a data structure has methods implented on it, then it will be backed by a test.

Referenced are many popular texts written for Java and Python, such as:

- The Algorithm Design Manual - Skiena
- Elements of Programming Interviews - Adnan Aziz, et al.
- Algorithms, 4th Edition - Sedgewick & Wayne
- The Go Programming Language - Donovan & Kernighan

## Table of Contents

### Data Structures

- Arrays
- Static Arrays
- Dynamic Arrays

- Lists
- Singly-linked lists
- Doubly-linked lists

- Stacks/Queue's
- Stack
- Queue
- Priority Queue

- Trees
- Binary Trees
- Binary Search Trees
- AVL Trees
- Red Black Trees

- Graphs
- Hash Maps
- ...

### Algorithms

- Sorting algorithms
- Bubble Sort
- Insertion Sort
- Quick Sort

- Searching Algorithms
- Binary Search
- Depth First Search
- Breadth First Search

- ...

### Algorithmic Problem Solving

- Back tracking
- Divide and Conquer
- ...