> For the complete documentation index, see [llms.txt](https://interviews.woojiahao.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://interviews.woojiahao.com/data-structures.md).

# Data Structures

- [Arrays](https://interviews.woojiahao.com/data-structures/arrays.md): Array problems are by far the most common type of algorithm problems I have encountered. There are a few techniques that are used very commonly so it is best to familiarize yourself with all of them
- [Matrices](https://interviews.woojiahao.com/data-structures/arrays/matrices.md): Matrix problems are quite common and are relatively straightforward, just focus on understanding the techniques required
- [Strings](https://interviews.woojiahao.com/data-structures/strings.md): String problems are very similar to array problems as they both use very similar techniques but there are some slight differences
- [Linked Lists](https://interviews.woojiahao.com/data-structures/linked-lists.md): Linked lists are useful when paired with hash tables as it allows search/insertion in O(1) time and they can also be used alone to solve problems
- [Doubly Linked Lists](https://interviews.woojiahao.com/data-structures/linked-lists/doubly-linked-lists.md): Doubly linked lists hold references to both the previous and next elements
- [Hash Tables](https://interviews.woojiahao.com/data-structures/hash-tables.md): Hash tables are a corner stone of data structures for most problems, they are useful when there are unique keys with given values
- [Graphs](https://interviews.woojiahao.com/data-structures/graphs.md): Graph problems are plentiful but the core data structure does have some unique techniques that can be applied to it
- [Trees](https://interviews.woojiahao.com/data-structures/graphs/trees.md): Trees are special types of graphs that have exactly N - 1 edges with exactly one path between nodes. They are one of the most common category of problems so it is a must to master them
- [Binary Search Trees](https://interviews.woojiahao.com/data-structures/graphs/trees/binary-search-trees.md): Binary Search Trees are the first of many specialized trees
- [Heaps](https://interviews.woojiahao.com/data-structures/graphs/trees/heaps.md): Heaps or priority queues are a very powerful data structure that can be used to easily store information that has some intrinsic order
- [Tries](https://interviews.woojiahao.com/data-structures/graphs/trees/tries.md): Tries are special types of trees that make searching and storing strings more efficient
- [Segment Trees](https://interviews.woojiahao.com/data-structures/graphs/trees/segment-trees.md): Segment trees are a unique application of trees that help to solve problems that involve many range queries over an array
- [Stacks](https://interviews.woojiahao.com/data-structures/stacks.md): Stack problems usually come in the form of monotonic stack problems
- [Queues](https://interviews.woojiahao.com/data-structures/queues.md): Queue problems are less common but it is still a data structure that is worth understanding well
- [Double Ended Queues](https://interviews.woojiahao.com/data-structures/queues/double-ended-queues.md)
- [Union-Find Disjoint Set (UFDS)](https://interviews.woojiahao.com/data-structures/union-find-disjoint-set-ufds.md): UFDS is a straightforward but powerful data structure often used to determine when data is in the same set as one another
