Data structure
Particular way of storing and organizing data in a computer
From Wikipedia, the free encyclopedia
In computer science, a data structure is a way to organize and store data that is usually chosen for efficient access to data.[1][2][3] More precisely, a data structure is the physical implementation of a data type, including specifications of the data organization and storage format, as well functions or operations for working with this data. Data structures are closely related to abstract data types (ADTs).[4] The data structure describes the representation of data in memory and how operations are carried out, while the ADT describes the logical form or algebraic structure of the data type—what operations are allowed and what results they produce—without describing how those operations are implemented.[4] Some authors do not use the term "abstract data type" and simply refer to the logical and physical forms of the data structure.[5]

Usage
Efficient data structures are essential for managing large datasets and are fundamental to algorithm design. Relational databases commonly use B-tree indice for data retrieval,[6] while compiler implementations usually use hash tables to look up identifiers.[7] Filesystems and search engines make extensive use of specialized data structures.[8][9] Rob Pike has stated that the choice of data structure almost always has a greater impact on efficiency than the choice of algorithm, as the algorithm is often self-evident.[10] Data structures are used to organize data in both primary memory (RAM) and secondary storage (such as disks).[11]
Implementation
Implementing a data structure involves writing a set of subroutines—such as insertion, deletion, traversal, or lookup—that create and manipulate instances of that structure. Data structures can be implemented using a variety of programming languages and techniques. A data structure corresponds directly to a single concrete implementation, in contrast to an ADT which describes behavior and operations independently of any particular implementation. There may be multiple concrete data structures for the same ADT, for example a linked list or a resizable array for the list ADT.[12] As such, the efficiency of a data structure is closely tied to its concrete implementation, and must be evaluated through benchmarks and theoretical simulation.[13]
Data structures generally rely on the ability of a computer to store and access data via memory addresses (as specified by a pointer—a bit string—or more abstractly via references) that can be itself stored in memory and manipulated by the program. For example, arrays and records store elements in contiguous memory locations, requiring a rigid layout but allowing fast indexed access by computing the address through arithmetic operations. In contrast, linked data structures (such as linked lists and trees) store addresses of related elements within their structure, enabling flexible memory usage and dynamic resizing. These different methods of data structuring come with different tradeoffs and are suited to different tasks. For instance, the contiguous memory allocation in arrays facilitates rapid access and modification operations, leading to optimized performance in sequential data processing scenarios.[14]
Examples

There are numerous types of data structures, generally built upon simpler primitive data types. Well known examples are:[15]
- An array is a number of elements in a specific order, typically all of the same type (depending on the language, individual elements may either all be forced to be the same type, or may be of almost any type). Elements are accessed using an integer index to specify which element is required. Typical implementations allocate contiguous memory words for the elements of arrays (but this is not always a necessity). Arrays may be fixed-length or resizable.
- A linked list (also just called list) is a linear collection of data elements of any type, called nodes, where each node has itself a value, and points to the next node in the linked list. The principal advantage of a linked list over an array is that values can always be efficiently inserted and removed without relocating the rest of the list. Certain other operations, such as random access to a certain element, are however slower on lists than on arrays.
- A record (also called tuple or struct) is an aggregate data structure. A record is a value that contains other values, typically in fixed number and sequence and typically indexed by names. The elements of records are usually called fields or members. In the context of object-oriented programming, records are known as plain old data structures to distinguish them from objects.[16]
- Hash tables, also known as hash maps, are data structures that provide fast retrieval of values based on keys. They use a hashing function to map keys to indexes in an array, allowing for constant-time access in the average case. Hash tables are commonly used in dictionaries, caches, and database indexing. However, hash collisions can occur, which can impact their performance. Techniques like chaining and open addressing are employed to handle collisions.
- Graphs are collections of nodes connected by edges, representing relationships between entities. Graphs can be used to model social networks, computer networks, and transportation networks, among other things. They consist of vertices (nodes) and edges (connections between nodes). Graphs can be directed or undirected, and they can have cycles or be acyclic. Graph traversal algorithms include breadth-first search and depth-first search.
- Stacks and queues are abstract data types that can be implemented using arrays or linked lists. A stack has two primary operations: push (adds an element to the top of the stack) and pop (removes the topmost element from the stack), that follow the Last In, First Out (LIFO) principle. Queues have two main operations: enqueue (adds an element to the rear of the queue) and dequeue (removes an element from the front of the queue) that follow the First In, First Out (FIFO) principle.
- Trees represent a hierarchical organization of elements. A tree consists of nodes connected by edges, with one node being the root and all other nodes forming subtrees. Trees are widely used in various algorithms and data storage scenarios. Binary trees (particularly heaps), AVL trees, and B-trees are some popular types of trees. They enable efficient and optimal searching, sorting, and hierarchical representation of data.
- A trie, or prefix tree, is a special type of tree used to efficiently retrieve strings. In a trie, each node represents a character of a string, and the edges between nodes represent the characters that connect them. This structure is especially useful for tasks like autocomplete, spell-checking, and creating dictionaries. Tries allow for quick searches and operations based on string prefixes.
Language support
Most assembly languages and some low-level languages, such as BCPL (Basic Combined Programming Language), lack built-in support for data structures. On the other hand, many high-level programming languages and some higher-level assembly languages, such as MASM, have special syntax or other built-in support for certain data structures, such as records and arrays. For example, the C (a direct descendant of BCPL) and Pascal languages support structs and records, respectively, in addition to vectors (one-dimensional arrays) and multi-dimensional arrays.[17][18]
Most programming languages feature some sort of library mechanism that allows data structure implementations to be reused by different programs. Modern languages usually come with standard libraries that implement the most common data structures. Examples are the C++ Standard Template Library, the Java Collections Framework, and the Microsoft .NET Framework.
Modern languages also generally support modular programming, the separation between the interface of a library module and its implementation. Some provide opaque data types that allow clients to hide implementation details. Object-oriented programming languages, such as C++, Java, and Smalltalk, typically use classes for this purpose.
Many known data structures have concurrent versions which allow multiple computing threads to access a single concrete instance of a data structure simultaneously.[19]