Jump to content

Data structure: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
Rephrased sentence to better fit needs.
Further reading: use a more modern book
 
(340 intermediate revisions by more than 100 users not shown)
Line 1: Line 1:
{{short description|Particular way of storing and organizing data in a computer}}
{{For|information on Wikipedia's data structure|Wikipedia:Administration#Data structure and development}}
{{hatgrp|
{{distinguish|data type}}
{{for|another use| Blockchain}}
{{more citations needed|date=January 2017}}
{{distinguish|Data type|Data model}}
}}
[[Image:Hash table 3 1 1 0 1 0 0 SP.svg|thumb|315px|A data structure known as a [[hash table]].]]
[[Image:Hash table 3 1 1 0 1 0 0 SP.svg|thumb|315px|A data structure known as a [[hash table]].]]
In [[computer science]], a '''data structure''' is a data organization, management and storage format that enables [[Algorithmic efficiency|efficient]] access and modification.<ref>{{Cite book|url=https://dl.acm.org/citation.cfm?id=1614191|title=Introduction to Algorithms, Third Edition|last=Cormen|first=Thomas H.|last2=Leiserson|first2=Charles E.|last3=Rivest|first3=Ronald L.|last4=Stein|first4=Clifford|date=2009|publisher=The MIT Press|isbn=978-0262033848|edition=3rd}}</ref><ref>Black (ed.), Paul E. (2004-12-15). Entry for ''data structure'' in ''[[Dictionary of Algorithms and Data Structures]]''. Online version. U.S. [[National Institute of Standards and Technology]], 15 December 2004. Retrieved on 2009-05-21 from http://xlinux.nist.gov/dads/HTML/datastructur.html.</ref><ref>Encyclopædia Britannica (2009). Entry ''data structure'' in the [[Encyclopædia Britannica]] (2009). Retrieved on 2009-05-21 from http://www.britannica.com/EBchecked/topic/152190/data-structure.</ref> More precisely, a data structure is a collection of data values, the relationships among them, and the functions or operations that can be applied to the data.<ref>{{Cite book|url=http://dl.acm.org/citation.cfm?id=1074100.1074312|title=Encyclopedia of Computer Science|last=Wegner|first=Peter|last2=Reilly|first2=Edwin D.|publisher=John Wiley and Sons Ltd.|isbn=978-0470864128|location=Chichester, UK|pages=507–512|date=2003-08-29}}</ref>
In [[computer science]], a '''data structure''' is a [[data]] organization and storage format that is usually chosen for [[Efficiency|efficient]] [[Data access|access]] to data.<ref>{{Cite book|url=https://dl.acm.org/citation.cfm?id=1614191|title=Introduction to Algorithms, Third Edition|last1=Cormen|first1=Thomas H.|last2=Leiserson|first2=Charles E.|last3=Rivest|first3=Ronald L.|last4=Stein|first4=Clifford|date=2009|publisher=The MIT Press|isbn=978-0262033848|edition=3rd}}</ref><ref>{{cite book |last1=Black |first1=Paul E. |editor1-last=Pieterse |editor1-first=Vreda |editor2-last=Black |editor2-first=Paul E. |title=Dictionary of Algorithms and Data Structures [online] |date=15 December 2004 |publisher=[[National Institute of Standards and Technology]] |chapter-url=https://xlinux.nist.gov/dads/HTML/datastructur.html |access-date=2018-11-06 |chapter=data structure}}</ref><ref>{{cite encyclopedia |encyclopedia=Encyclopaedia Britannica |title= Data structure |url=https://www.britannica.com/technology/data-structure |access-date=2018-11-06 |date=17 April 2017}}</ref> More precisely, a data structure is a collection of data values, the relationships among them, and the [[Function (computer programming)|functions]] or [[Operator (computer programming)|operations]] that can be applied to the data,<ref>{{Cite book|url=http://dl.acm.org/citation.cfm?id=1074100.1074312|title=Encyclopedia of Computer Science|last1=Wegner|first1=Peter|last2=Reilly|first2=Edwin D.|publisher=John Wiley and Sons |isbn=978-0470864128|location=Chichester, UK|pages=507–512|date=2003-08-29}}</ref> i.e., it is an [[algebraic structure]] about [[data]].


==Usage==
==Usage ==
Data structures serve as the basis for [[abstract data type]]s (ADT). The ADT defines the logical form of the data type. The data structure implements the physical form of the [[data type]].<ref>{{cite web|title=Abstract Data Types|url=https://opendsa-server.cs.vt.edu/ODSA/Books/CS3/html/ADT.html|website=Virginia Tech - CS3 Data Structures & Algorithms|access-date=2023-02-15|archive-url=https://web.archive.org/web/20230210114105/https://opendsa-server.cs.vt.edu/ODSA/Books/CS3/html/ADT.html|archive-date=2023-02-10|url-status=live}}</ref>


Different types of data structures are suited to different kinds of applications, and some are highly specialized to specific tasks. For example, [[Relational database|relational databases]] commonly use [[B-tree]] indexes for data retrieval,<ref>{{cite book|chapter-url=http://searchsecurity.techtarget.com/generic/0,295582,sid87_gci1184450,00.html|archive-url=https://web.archive.org/web/20070818140343/http://searchsqlserver.techtarget.com/generic/0,295582,sid87_gci1184450,00.html|archive-date=2007-08-18|url-status=usurped|title=Beginning Database Design|isbn=978-0-7645-7490-0|author=Gavin Powell|chapter=Chapter 8: Building Fast-Performing Database Models|publisher=[[Wrox Press|Wrox Publishing]]|year=2006}}</ref> while [[compiler]] [[Implementation|implementations]] usually use [[hash table]]s to look up [[Identifier (computer languages)|identifiers]].<ref>{{cite web |title=1.5 Applications of a Hash Table |url=http://www.cs.uregina.ca/Links/class-info/210/Hash/ |website=University of Regina - CS210 Lab: Hash Table |access-date=2018-06-14 |archive-date=2021-04-27 |archive-url=https://web.archive.org/web/20210427183057/https://www.cs.uregina.ca/Links/class-info/210/Hash/ |url-status=dead }}</ref>
Data structures serve as the basis for [[abstract data type]]s (ADT). "The ADT defines the logical form of the data type. The data structure implements the physical form of the data type."<ref>{{cite web |title=Abstract Data Types |url=https://opendsa-server.cs.vt.edu/ODSA/Books/CS3/html/ADT.html |website=Virginia Tech - CS3 Data Structures & Algorithms}}</ref>


Data structures provide a means to manage large amounts of data efficiently for uses such as large [[database]]s and internet indexing services. Usually, efficient data structures are key to designing efficient [[algorithm]]s. Some formal design methods and [[programming language]]s emphasize data structures, rather than algorithms, as the key organizing factor in software design. Data structures can be used to organize the storage and retrieval of information stored in both [[main memory]] and [[Computer data storage|secondary memory]].<ref>{{cite web |title=When data is too big to fit into the main memory | archive-url=https://web.archive.org/web/20180410032656/http://homes.sice.indiana.edu/yye/lab/teaching/spring2014-C343/datatoobig.php | url-status=dead | archive-date=2018-04-10 |url=http://homes.sice.indiana.edu/yye/lab/teaching/spring2014-C343/datatoobig.php |website=Indiana University Bloomington - Data Structures (C343/A594)|year=2014}}</ref>
Different kinds of data structures are suited to different kinds of applications, and some are highly specialized to specific tasks. For example, relational databases commonly use [[B-tree]] indexes for data retrieval,<ref>{{cite web|url=http://searchsecurity.techtarget.com/generic/0,295582,sid87_gci1184450,00.html|website=Beginning Database Design {{ISBN|978-0-7645-7490-0}}|author=Gavin Powell|title=Chapter 8: Building Fast-Performing Database Models|publisher=[[Wrox Press|Wrox Publishing]]|year=2006}}</ref> while [[compiler]] implementations usually use [[hash table]]s to look up identifiers.<ref>{{cite web |title=1.5 Applications of a Hash Table |url=http://www.cs.uregina.ca/Links/class-info/210/Hash/ |website=University of Regina - CS210 Lab: Hash Table}}</ref>

Data structures provide a means to manage large amounts of data efficiently for uses such as large [[database]]s and [[web indexing|internet indexing services]]. Usually, efficient data structures are key to designing efficient [[algorithm]]s. Some formal design methods and [[programming language]]s emphasize data structures, rather than algorithms, as the key organizing factor in software design. Data structures can be used to organize the storage and retrieval of information stored in both [[main memory]] and [[secondary memory]].<ref>{{cite web |title=When data is too big to fit into the main memory |url=http://homes.sice.indiana.edu/yye/lab/teaching/spring2014-C343/datatoobig.php |website=homes.sice.indiana.edu}}</ref>


==Implementation==
==Implementation==
Data structures are generally based on the ability of a computer to fetch and store data at any place in its memory, specified by a [[pointer (computer programming)|pointer]]—a bit string, representing a [[memory address]], that can be itself stored in memory and manipulated by the program. Thus, the [[Array data structure|array]] and [[record (computer science)|record]] data structures are based on computing the addresses of data items with [[arithmetic operations]], while the [[linked data structure]]s are based on storing addresses of data items within the structure itself. Many data structures use both principles, sometimes combined in non-trivial ways (as in [[XOR linked list|XOR linking]]).{{citation needed|date=January 2017}}
Data structures can be implemented using a variety of programming languages and techniques, but they all share the common goal of efficiently organizing and storing data.<ref>{{Cite journal |last1=Vaishnavi |first1=Gunjal |last2=Shraddha |first2=Gavane |last3=Yogeshwari |first3=Joshi |date=2021-06-21 |title=Survey Paper on Fine-Grained Facial Expression Recognition using Machine Learning |url=http://www.ijcaonline.org/archives/volume183/number11/vaishnavi-2021-ijca-921427.pdf |journal=International Journal of Computer Applications |volume=183 |issue=11 |pages=47–49 |doi=10.5120/ijca2021921427}}</ref> Data structures are generally based on the ability of a [[computer]] to fetch and store data at any place in its memory, specified by a [[pointer (computer programming)|pointer]]—a [[bit]] [[String (computer science)|string]], representing a [[memory address]], that can be itself stored in memory and manipulated by the program. Thus, the [[Array data structure|array]] and [[record (computer science)|record]] data structures are based on computing the addresses of data items with [[arithmetic operations]], while the [[linked data structure]]s are based on storing addresses of data items within the structure itself. This approach to data structuring has profound implications for the efficiency and scalability of algorithms. For instance, the contiguous memory allocation in arrays facilitates rapid access and modification operations, leading to optimized performance in sequential data processing scenarios.<ref>{{Citation |last1=Nievergelt |first1=Jürg |title=Chapter 17 - Spatial Data Structures: Concepts and Design Choices |date=2000-01-01 |url=https://www.sciencedirect.com/science/article/pii/B9780444825377500188 |work=Handbook of Computational Geometry |pages=725–764 |editor-last=Sack |editor-first=J. -R. |access-date=2023-11-12 |place=Amsterdam |publisher=North-Holland |isbn=978-0-444-82537-7 |last2=Widmayer |first2=Peter |editor2-last=Urrutia |editor2-first=J.}}</ref>


The implementation of a data structure usually requires writing a set of [[subroutine|procedures]] that create and manipulate instances of that structure. The efficiency of a data structure cannot be analyzed separately from those operations. This observation motivates the theoretical concept of an [[abstract data type]], a data structure that is defined indirectly by the operations that may be performed on it, and the mathematical properties of those operations (including their space and time cost).{{citation needed|date=January 2017}}
The implementation of a data structure usually requires writing a set of [[subroutine|procedures]] that create and manipulate instances of that structure. The efficiency of a data structure cannot be analyzed separately from those operations. This observation motivates the theoretical concept of an [[abstract data type]], a data structure that is defined indirectly by the operations that may be performed on it, and the mathematical properties of those operations (including their space and time cost).<ref>{{Cite book|title=Advanced biotechnology : For B Sc and M Sc students of biotechnology and other biological sciences.|last=Dubey, R. C.|date=2014|publisher=S Chand|isbn=978-81-219-4290-4|location=New Delhi|oclc=883695533}}</ref>


==Examples==
==Examples==
{{main article|List of data structures}}
{{main article|List of data structures}}
[[File:Python 3. The standard type hierarchy.png|thumb|The standard [[Data type|type]] hierarchy of the programming language [[Python_(programming_language) | Python 3]].]]
There are numerous types of data structures, generally built upon simpler [[primitive data type]]s:<ref>{{Cite book|title=Data structures|last=Seymour,|first=Lipschutz,|date=2014|publisher=McGraw Hill Education (India) Private Limited|isbn=9781259029967|edition=Revised First|location=New Delhi|oclc=927793728}}</ref>
There are numerous types of data structures, generally built upon simpler [[primitive data type]]s. Well known examples are:<ref>{{Cite book|title=Data structures|last=Seymour|first=Lipschutz|date=2014|publisher=McGraw Hill Education|isbn=9781259029967|edition=Revised first|location=New Delhi, India|oclc=927793728}}</ref>
* An [[array data structure|''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.
* An [[Array (data structure)|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 [[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 (computer science)|''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''.
* A [[Record (computer science)|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 structure]]s to distinguish them from objects.<ref>{{cite web|url=http://www.fnal.gov/docs/working-groups/fpcltf/Pkg/ISOcxx/doc/POD.html |access-date=6 December 2016 |title=C++ Language Note: POD Types |author=Walter E. Brown |publisher=[[Fermi National Accelerator Laboratory]] |date=September 29, 1999|archive-url=https://web.archive.org/web/20161203130543/http://www.fnal.gov/docs/working-groups/fpcltf/Pkg/ISOcxx/doc/POD.html|archive-date=2016-12-03}}</ref>
* A [[Union (computer science)|''union'']] is a data structure that specifies which of a number of permitted primitive types may be stored in its instances, e.g. ''float'' or ''long integer''. Contrast with a [[record (computer science)|record]], which could be defined to contain a float ''and'' an integer; whereas in a union, there is only one value at a time. Enough space is allocated to contain the widest member datatype.
* [[Hash table]]s, 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.
* A ''[[tagged union]]'' (also called [[variant type|''variant'']], ''variant record'', ''discriminated union'', or ''disjoint union'') contains an additional field indicating its current type, for enhanced type safety.
* [[Graph (abstract data type)|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.
* An [[Object (computer science)|''object'']] is a data structure that contains data fields, like a record does, as well as various [[Method (computer programming)|methods]] which operate on the data contents. An object is an in-memory instance of a class from a taxonomy. In the context of [[object-oriented programming]], records are known as [[plain old data structures]] to distinguish them from objects. <ref>{{cite web|url=http://www.fnal.gov/docs/working-groups/fpcltf/Pkg/ISOcxx/doc/POD.html |accessdate=6 December 2016 |title=C++ Language Note: POD Types |author=Walter E. Brown |publisher=[[Fermi National Accelerator Laboratory]] |date=September 29, 1999}}</ref>
* [[Stack (abstract data type)|Stacks]] and [[queue (abstract data type)|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.
* [[Tree (data structure)|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 tree]]s (particularly [[Heap (data structure)|heap]]s), [[AVL tree]]s, and [[B-tree]]s 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.
In addition, [[Graph (computer science)|''graphs'']] and ''[[binary trees]]'' are other commonly used structures for data.


==Language support==
==Language support==
Most [[assembly language]]s 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 language]]s 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 (programming language)|C]] (a direct descendant of BCPL) and [[Pascal (programming language)|Pascal]] languages support [[Record (computer science)|structs]] and records, respectively, in addition to vectors (one-dimensional [[array data type|arrays]]) and multi-dimensional arrays.<ref name="gnu-c">{{cite web | url=https://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html | title=The GNU C Manual | publisher=Free Software Foundation | accessdate=2014-10-15}}</ref><ref>{{cite web | url=http://www.freepascal.org/docs-html/ref/ref.html | title=Free Pascal: Reference Guide | publisher=Free Pascal | accessdate=2014-10-15}}</ref>
Most [[assembly language]]s and some [[Low-level programming language|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 language]]s 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 (programming language)|C]] (a direct descendant of BCPL) and [[Pascal (programming language)|Pascal]] languages support [[Record (computer science)|structs]] and records, respectively, in addition to vectors (one-dimensional [[array data type|arrays]]) and multi-dimensional arrays.<ref name="gnu-c">{{cite web | url=https://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html | title=The GNU C Manual | publisher=Free Software Foundation | access-date=2014-10-15}}</ref><ref>{{cite web | url=http://www.freepascal.org/docs-html/ref/ref.html | title=Free Pascal: Reference Guide | publisher=Free Pascal |first = Michaël |last =Van Canneyt|date = September 2017}}</ref>


Most programming languages feature some sort of [[Library (computing)|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]].
Most programming languages feature some sort of [[Library (computing)|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]].
Line 37: Line 40:
Modern languages also generally support [[modular programming]], the separation between the [[interface (computing)|interface]] of a library module and its implementation. Some provide [[opaque data type]]s that allow clients to hide implementation details. [[Object-oriented programming language]]s, such as [[C++]], [[Java (programming language)|Java]], and [[Smalltalk]], typically use [[classes (computer science)|classes]] for this purpose.
Modern languages also generally support [[modular programming]], the separation between the [[interface (computing)|interface]] of a library module and its implementation. Some provide [[opaque data type]]s that allow clients to hide implementation details. [[Object-oriented programming language]]s, such as [[C++]], [[Java (programming language)|Java]], and [[Smalltalk]], typically use [[classes (computer science)|classes]] for this purpose.


Many known data structures have [[concurrent data structure|concurrent]] versions which allow multiple computing threads to access a single concrete instance of a data structure simultaneously.<ref>{{cite web |author1=Mark Moir and Nir Shavit |title=Concurrent Data Structures |url=https://www.cs.tau.ac.il/~shanir/concurrent-data-structures.pdf |website=cs.tau.ac.il}}</ref>
Many known data structures have [[concurrent data structure|concurrent]] versions which allow multiple computing threads to access a single concrete instance of a data structure simultaneously.<ref>{{cite web |author1=Mark Moir and Nir Shavit |title=Concurrent Data Structures |url=https://www.cs.tau.ac.il/~shanir/concurrent-data-structures.pdf |archive-url=https://web.archive.org/web/20110401070433/http://www.cs.tau.ac.il/~shanir/concurrent-data-structures.pdf |archive-date=2011-04-01 |url-status=dead |website=cs.tau.ac.il}}</ref>


==See also==
==See also==
{{Wikipedia books|Data structures}}
{{Div col|colwidth=15em}}
{{Div col|colwidth=15em}}
* [[Abstract data type]]
* [[Abstract data type]]
Line 50: Line 52:
* [[Persistent data structure]]
* [[Persistent data structure]]
* [[Plain old data structure]]
* [[Plain old data structure]]
* [[Queap]]
* [[Succinct data structure]]
* [[Tree (data structure)]]
{{Div col end}}
{{Div col end}}


Line 56: Line 61:


==Bibliography==
==Bibliography==
{{Lacking ISBN|date=September 2016}}
* Peter Brass, ''Advanced Data Structures'', [[Cambridge University Press]], 2008, {{ISBN|978-0521880374}}
* Peter Brass, ''Advanced Data Structures'', [[Cambridge University Press]], 2008, {{ISBN|978-0521880374}}
* [[Donald Knuth]], ''[[The Art of Computer Programming]]'', vol. 1. [[Addison-Wesley]], 3rd edition, 1997, {{ISBN|978-0201896831}}
* [[Donald Knuth]], ''[[The Art of Computer Programming]]'', vol. 1. [[Addison-Wesley]], 3rd edition, 1997, {{ISBN|978-0201896831}}
Line 63: Line 67:


==Further reading==
==Further reading==
* [https://opendatastructures.org Open Data Structures by Pat Morin]
* [[Alfred Aho]], [[John Hopcroft]], and [[Jeffrey Ullman]], ''Data Structures and Algorithms'', Addison-Wesley, 1983, {{ISBN|0-201-00023-7}}
* [[Gaston Gonnet|G. H. Gonnet]] and [[Ricardo Baeza-Yates|R. Baeza-Yates]], ''Handbook of Algorithms and Data Structures - in Pascal and C'', second edition, Addison-Wesley, 1991, {{ISBN|0-201-41607-7}} [https://users.dcc.uchile.cl/~rbaeza/handbook/hbook.html Book]
* [[Gaston Gonnet|G. H. Gonnet]] and [[Ricardo Baeza-Yates|R. Baeza-Yates]], ''[https://users.dcc.uchile.cl/~rbaeza/handbook/hbook.html Handbook of Algorithms and Data Structures - in Pascal and C]'', second edition, Addison-Wesley, 1991, {{ISBN|0-201-41607-7}}
* [[Ellis Horowitz]] and Sartaj Sahni, ''Fundamentals of Data Structures in Pascal'', [[Computer Science Press]], 1984, {{ISBN|0-914894-94-3}}
* [[Ellis Horowitz]] and Sartaj Sahni, ''Fundamentals of Data Structures in Pascal'', [[Computer Science Press]], 1984, {{ISBN|0-914894-94-3}}


==External links==
==External links==
{{Sister project links|wikt=data structure|commons=Category:Data structures|b=Data Structures|v=Topic:Data structures|n=no}}
{{Sister project links|wikt=data structure|commons=Category:Data structures|b=Data Structures|v=Topic:Data structures|n=no}}
* [http://nist.gov/dads/ Descriptions] from the [[Dictionary of Algorithms and Data Structures]]
* [https://xlinux.nist.gov/dads/ Descriptions] from the [[Dictionary of Algorithms and Data Structures]]
* [http://www.cs.auckland.ac.nz/software/AlgAnim/ds_ToC.html Data structures course]
* [http://www.cs.auckland.ac.nz/software/AlgAnim/ds_ToC.html Data structures course]
* [http://msdn.microsoft.com/en-us/library/aa289148(VS.71).aspx An Examination of Data Structures from .NET perspective]
* [http://msdn.microsoft.com/en-us/library/aa289148(VS.71).aspx An Examination of Data Structures from .NET perspective]
Line 77: Line 81:
{{Data types}}
{{Data types}}
{{Data model}}
{{Data model}}
{{Strings}}


{{Authority control}}
{{Authority control}}

Latest revision as of 18:04, 4 January 2025

A data structure known as a hash table.

In computer science, a data structure is a data organization and storage format that is usually chosen for efficient access to data.[1][2][3] More precisely, a data structure is a collection of data values, the relationships among them, and the functions or operations that can be applied to the data,[4] i.e., it is an algebraic structure about data.

Usage

[edit]

Data structures serve as the basis for abstract data types (ADT). The ADT defines the logical form of the data type. The data structure implements the physical form of the data type.[5]

Different types of data structures are suited to different kinds of applications, and some are highly specialized to specific tasks. For example, relational databases commonly use B-tree indexes for data retrieval,[6] while compiler implementations usually use hash tables to look up identifiers.[7]

Data structures provide a means to manage large amounts of data efficiently for uses such as large databases and internet indexing services. Usually, efficient data structures are key to designing efficient algorithms. Some formal design methods and programming languages emphasize data structures, rather than algorithms, as the key organizing factor in software design. Data structures can be used to organize the storage and retrieval of information stored in both main memory and secondary memory.[8]

Implementation

[edit]

Data structures can be implemented using a variety of programming languages and techniques, but they all share the common goal of efficiently organizing and storing data.[9] Data structures are generally based on the ability of a computer to fetch and store data at any place in its memory, specified by a pointer—a bit string, representing a memory address, that can be itself stored in memory and manipulated by the program. Thus, the array and record data structures are based on computing the addresses of data items with arithmetic operations, while the linked data structures are based on storing addresses of data items within the structure itself. This approach to data structuring has profound implications for the efficiency and scalability of algorithms. For instance, the contiguous memory allocation in arrays facilitates rapid access and modification operations, leading to optimized performance in sequential data processing scenarios.[10]

The implementation of a data structure usually requires writing a set of procedures that create and manipulate instances of that structure. The efficiency of a data structure cannot be analyzed separately from those operations. This observation motivates the theoretical concept of an abstract data type, a data structure that is defined indirectly by the operations that may be performed on it, and the mathematical properties of those operations (including their space and time cost).[11]

Examples

[edit]
The standard type hierarchy of the programming language Python 3.

There are numerous types of data structures, generally built upon simpler primitive data types. Well known examples are:[12]

  • 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.[13]
  • 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

[edit]

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.[14][15]

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.[16]

See also

[edit]

References

[edit]
  1. ^ Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (2009). Introduction to Algorithms, Third Edition (3rd ed.). The MIT Press. ISBN 978-0262033848.
  2. ^ Black, Paul E. (15 December 2004). "data structure". In Pieterse, Vreda; Black, Paul E. (eds.). Dictionary of Algorithms and Data Structures [online]. National Institute of Standards and Technology. Retrieved 2018-11-06.
  3. ^ "Data structure". Encyclopaedia Britannica. 17 April 2017. Retrieved 2018-11-06.
  4. ^ Wegner, Peter; Reilly, Edwin D. (2003-08-29). Encyclopedia of Computer Science. Chichester, UK: John Wiley and Sons. pp. 507–512. ISBN 978-0470864128.
  5. ^ "Abstract Data Types". Virginia Tech - CS3 Data Structures & Algorithms. Archived from the original on 2023-02-10. Retrieved 2023-02-15.
  6. ^ Gavin Powell (2006). "Chapter 8: Building Fast-Performing Database Models". Beginning Database Design. Wrox Publishing. ISBN 978-0-7645-7490-0. Archived from the original on 2007-08-18.
  7. ^ "1.5 Applications of a Hash Table". University of Regina - CS210 Lab: Hash Table. Archived from the original on 2021-04-27. Retrieved 2018-06-14.
  8. ^ "When data is too big to fit into the main memory". Indiana University Bloomington - Data Structures (C343/A594). 2014. Archived from the original on 2018-04-10.
  9. ^ Vaishnavi, Gunjal; Shraddha, Gavane; Yogeshwari, Joshi (2021-06-21). "Survey Paper on Fine-Grained Facial Expression Recognition using Machine Learning" (PDF). International Journal of Computer Applications. 183 (11): 47–49. doi:10.5120/ijca2021921427.
  10. ^ Nievergelt, Jürg; Widmayer, Peter (2000-01-01), Sack, J. -R.; Urrutia, J. (eds.), "Chapter 17 - Spatial Data Structures: Concepts and Design Choices", Handbook of Computational Geometry, Amsterdam: North-Holland, pp. 725–764, ISBN 978-0-444-82537-7, retrieved 2023-11-12
  11. ^ Dubey, R. C. (2014). Advanced biotechnology : For B Sc and M Sc students of biotechnology and other biological sciences. New Delhi: S Chand. ISBN 978-81-219-4290-4. OCLC 883695533.
  12. ^ Seymour, Lipschutz (2014). Data structures (Revised first ed.). New Delhi, India: McGraw Hill Education. ISBN 9781259029967. OCLC 927793728.
  13. ^ Walter E. Brown (September 29, 1999). "C++ Language Note: POD Types". Fermi National Accelerator Laboratory. Archived from the original on 2016-12-03. Retrieved 6 December 2016.
  14. ^ "The GNU C Manual". Free Software Foundation. Retrieved 2014-10-15.
  15. ^ Van Canneyt, Michaël (September 2017). "Free Pascal: Reference Guide". Free Pascal.
  16. ^ Mark Moir and Nir Shavit. "Concurrent Data Structures" (PDF). cs.tau.ac.il. Archived from the original (PDF) on 2011-04-01.

Bibliography

[edit]

Further reading

[edit]
[edit]