In the design of many types of programs, the choice of data structures is a primary design consideration, as experience in building large systems has shown that the difficulty of implementation and the quality of the final result depends heavily on choosing the best data structure. After the data structures are chosen, then the algorithms to be used often become relatively obvious. Sometimes things work in the opposite direction - data structures are chosen because certain key tasks have algorithms that work best with particular data structures, but in either case the choice of appropriate data structures is crucial.

This insight has given rise to many formalised design methods and programming languages in which data structures, rather than algorithms, are the key organising factor. Object-oriented programming languages such as C++ and Java are one group of languages that exhibit this philosophy.

The fundamental building blocks of most data structures are arrays, records, and referencess.

This is an incomplete **list of data structures**:

- Linear data structures
- List
- Hash table
- Stack (a.k.a LIFO Last in, first out)
- Queue (a.k.a FIFO First in, first out)
- Deque
- Buffer gap

- Graph data structures
- Adjacency list
- Scene graph
- Tree data structures
- B-tree
- Binary search trees
- Self-balancing binary search trees

- Heap
- Parse tree
- Suffix tree
- Trie

- Abstract data structures
- Other data structures
- Tagged union

- Tagged union