# Data Structure

Data structure refers to a any specific way in which [data](data.md) is organized in computer memory. A specific data structure describes such things as order, relationships (interconnection, hierarchy, ...), formats and [types](data_type.md) of parts of the data. [Programming](programming.md) is sometimes seen as consisting mainly of two things: design of [algorithms](algorithm.md) and data structures these algorithm work with.

As a programmer dealing with a specific problem you oftentimes have a choice of multiple data structures -- choosing the right one is essential for performance and efficiency of your program. As with everything, each data structure has advantages and also its downsides; some are faster, some take less memory etc. For example for a searchable database of text string we can be choosing between a [binary tree](binary_tree.md) and a [hash table](hash_table.md); hash table offers theoretically much faster search, but binary trees may be more memory efficient and offer many other efficient operations like range search and sorting (which hash tables can do but very inefficiently).

## Specific Data Structures

These are just some common ones:

- [array](array.md)
- [binary_tree](binary_tree.md)
- [bitfield](bitfield.md)
- [blockchain](blockchain.md)
- [B+ tree](bplus_tree.md)
- [circular buffer](circular_bugger.md)
- [directed acyclic graph](dac.md)
- [graph](graph.md)
- [hash table](hash_table.md)
- [heap](heap.md)
- [linked list](linked_list.md)
- [N-ary tree](nary_tree.md)
- [record](record.md)
- [stack](stack.md)
- [string](string.md)
- [tree](tree.md)
- [queue](queue.md)

## See Also

- [data](data.md)
- [data type](data_type.md)