In theoretical [[computer science]], an '''abstract data structure''' is an abstract storage for data defined in terms of the set of operations to be performed on data and [[computational complexity]] for performing these operations, regardless the implementation in a concrete [[data structure]].
Selection of an abstract data structure is crucial in design of efficient [[algorithm]]s and in estimating their computational complexity, while selection of concrete data structures is important for efficient [[implementation]] of algorithms.
This notion is very close to that of [[Abstract data type]] ('''ADT'''), used in theory of [[programming language]]s. A close notion of [[data model]] additionally considers the pattern of interrelations between data elements ([[structure]] of the data structure, however awkward is sounds).
The names of many abstract data structures (and abstract data types) match the names of concrete data structures.