In
computer science
Computer science is the study of computation, automation, and information. Computer science spans theoretical disciplines (such as algorithms, theory of computation, information theory, and automation) to Applied science, practical discipli ...
, a list or sequence is an
abstract data type that represents a finite number of
order
Order, ORDER or Orders may refer to:
* Categorization, the process in which ideas and objects are recognized, differentiated, and understood
* Heterarchy, a system of organization wherein the elements have the potential to be ranked a number of ...
ed
value
Value or values may refer to:
Ethics and social
* Value (ethics) wherein said concept may be construed as treating actions themselves as abstract objects, associating value to them
** Values (Western philosophy) expands the notion of value beyo ...
s, where the same value may occur more than once. An instance of a list is a computer representation of the
mathematical concept of a
tuple
In mathematics, a tuple is a finite ordered list (sequence) of elements. An -tuple is a sequence (or ordered list) of elements, where is a non-negative integer. There is only one 0-tuple, referred to as ''the empty tuple''. An -tuple is defi ...
or finite
sequence
In mathematics, a sequence is an enumerated collection of objects in which repetitions are allowed and order matters. Like a set, it contains members (also called ''elements'', or ''terms''). The number of elements (possibly infinite) is called ...
; the (potentially) infinite analog of a list is a
stream
A stream is a continuous body of surface water flowing within the bed and banks of a channel. Depending on its location or certain characteristics, a stream may be referred to by a variety of local or regional names. Long large streams ...
. Lists are a basic example of
containers, as they contain other values. If the same value occurs multiple times, each occurrence is considered a distinct item.
The name list is also used for several concrete
data structures that can be used to implement
abstract lists, especially
linked lists and
arrays. In some contexts, such as in
Lisp programming, the term list may refer specifically to a linked list rather than an array. In
class-based programming, lists are usually provided as
instances of subclasses of a generic "list" class, and traversed via separate
iterators.
Many
programming language
A programming language is a system of notation for writing computer programs. Most programming languages are text-based formal languages, but they may also be graphical. They are a kind of computer language.
The description of a programming ...
s provide support for list data types, and have special syntax and semantics for lists and list operations. A list can often be constructed by writing the items in sequence, separated by
commas,
semicolons, and/or
space
Space is the boundless three-dimensional extent in which objects and events have relative position and direction. In classical physics, physical space is often conceived in three linear dimensions, although modern physicists usually consi ...
s, within a pair of delimiters such as
parentheses '()',
brackets '[]', brace (punctuation), braces '', or angle brackets '<>'. Some languages may allow list types to be array index, indexed or array slicing, sliced like array data type, array types, in which case the data type is more accurately described as an array.
In
type theory and
functional programming
In computer science, functional programming is a programming paradigm where programs are constructed by applying and composing functions. It is a declarative programming paradigm in which function definitions are trees of expressions tha ...
, abstract lists are usually defined
inductively by two operations: ''nil'' that yields the empty list, and ''cons'', which adds an item at the beginning of a list.
Operations
Implementation of the list data structure may provide some of the following
operations:
* a
constructor for creating an empty list;
* an operation for testing whether or not a list is empty;
* an operation for prepending an entity to a list
* an operation for appending an entity to a list
* an operation for determining the first component (or the "head") of a list
* an operation for referring to the list consisting of all the components of a list except for its first (this is called the "tail" of the list.)
* an operation for accessing the element at a given index.
Implementations
Lists are typically implemented either as
linked lists (either singly or doubly linked) or as
arrays, usually variable length or
dynamic arrays.
The standard way of implementing lists, originating with the programming language
Lisp, is to have each element of the list contain both its value and a pointer indicating the location of the next element in the list. This results in either a
linked list or a
tree, depending on whether the list has nested sublists. Some older Lisp implementations (such as the Lisp implementation of the
Symbolics 3600) also supported "compressed lists" (using
CDR coding) which had a special internal representation (invisible to the user). Lists can be manipulated using
iteration or
recursion
Recursion (adjective: ''recursive'') occurs when a thing is defined in terms of itself or of its type. Recursion is used in a variety of disciplines ranging from linguistics to logic. The most common application of recursion is in mathematic ...
. The former is often preferred in
imperative programming languages, while the latter is the norm in
functional languages.
Lists can be implemented as
self-balancing binary search trees holding index-value pairs, providing equal-time access to any element (e.g. all residing in the fringe, and internal nodes storing the right-most child's index, used to guide the search), taking the time logarithmic in the list's size, but as long as it doesn't change much will provide the illusion of
random access and enable swap, prefix and append operations in logarithmic time as well.
Programming language support
Some languages do not offer a list
data structure, but offer the use of
associative arrays or some kind of table to emulate lists. For example,
Lua provides tables. Although Lua stores lists that have numerical indices as arrays internally, they still appear as dictionaries.
In
Lisp, lists are the fundamental data type and can represent both program code and data. In most dialects, the list of the first three prime numbers could be written as
(list 2 3 5)
. In several dialects of Lisp, including
Scheme A scheme is a systematic plan for the implementation of a certain idea.
Scheme or schemer may refer to:
Arts and entertainment
* ''The Scheme'' (TV series), a BBC Scotland documentary series
* The Scheme (band), an English pop band
* ''The Schem ...
, a list is a collection of pairs, consisting of a value and a pointer to the next pair (or null value), making a singly linked list.
Applications
As the name implies, lists can be used to store a list of elements. However, unlike in traditional
arrays, lists can expand and shrink, and are stored dynamically in memory.
In computing, lists are easier to implement than sets. A finite
set
Set, The Set, SET or SETS may refer to:
Science, technology, and mathematics Mathematics
*Set (mathematics), a collection of elements
*Category of sets, the category whose objects and morphisms are sets and total functions, respectively
Electro ...
in the mathematical sense can be realized as a list with additional restrictions; that is, duplicate elements are disallowed and order is irrelevant. Sorting the list speeds up determining if a given item is already in the set, but in order to ensure the order, it requires more time to add new entry to the list. In efficient implementations, however, sets are implemented using
self-balancing binary search trees or
hash tables, rather than a list.
Lists also form the basis for other
abstract data types
In computer science, an abstract data type (ADT) is a mathematical model for data types. An abstract data type is defined by its behavior (semantics) from the point of view of a ''user'', of the data, specifically in terms of possible values, p ...
including the
queue, the
stack
Stack may refer to:
Places
* Stack Island, an island game reserve in Bass Strait, south-eastern Australia, in Tasmania’s Hunter Island Group
* Blue Stack Mountains, in Co. Donegal, Ireland
People
* Stack (surname) (including a list of people ...
, and their variations.
Abstract definition
The abstract list type ''L'' with elements of some type ''E'' (a
monomorphic list) is defined by the following functions:
:nil: () → ''L''
:cons: ''E'' × ''L'' → ''L''
:first: ''L'' → ''E''
:rest: ''L'' → ''L''
with the axioms
:first (cons (''e'', ''l'')) = ''e''
:rest (cons (''e'', ''l'')) = ''l''
for any element ''e'' and any list ''l''. It is implicit that
:cons (''e'', ''l'') ≠ ''l''
:cons (''e'', ''l'') ≠ ''e''
:cons (''e''
1, ''l''
1) = cons (''e''
2, ''l''
2) if ''e''
1 = ''e''
2 and ''l''
1 = ''l''
2
Note that first (nil ()) and rest (nil ()) are not defined.
These axioms are equivalent to those of the abstract
stack
Stack may refer to:
Places
* Stack Island, an island game reserve in Bass Strait, south-eastern Australia, in Tasmania’s Hunter Island Group
* Blue Stack Mountains, in Co. Donegal, Ireland
People
* Stack (surname) (including a list of people ...
data type.
In
type theory, the above definition is more simply regarded as an
inductive type
In type theory, a system has inductive types if it has facilities for creating a new type from constants and functions that create terms of that type. The feature serves a role similar to data structures in a programming language and allows a ...
defined in terms of constructors: ''nil'' and ''cons''. In algebraic terms, this can be represented as the transformation 1 + ''E'' × ''L'' → ''L''. ''first'' and ''rest'' are then obtained by
pattern matching on the ''cons'' constructor and separately handling the ''nil'' case.
The list monad
The list type forms a
monad with the following functions (using ''E''
* rather than ''L'' to represent monomorphic lists with elements of type ''E''):
:
:
where ''append'' is defined as:
:
Alternatively, the monad may be defined in terms of operations ''return'', ''fmap'' and ''join'', with:
:
:
Note that ''fmap'', ''join'', ''append'' and ''bind'' are well-defined, since they're applied to progressively deeper arguments at each recursive call.
The list type is an additive monad, with ''nil'' as the monadic zero and ''append'' as monadic sum.
Lists form a
monoid
In abstract algebra, a branch of mathematics, a monoid is a set equipped with an associative binary operation and an identity element. For example, the nonnegative integers with addition form a monoid, the identity element being 0.
Monoid ...
under the ''append'' operation. The identity element of the monoid is the empty list, ''nil''. In fact, this is the
free monoid over the set of list elements.
See also
*
Array
*
Queue
*
Set
Set, The Set, SET or SETS may refer to:
Science, technology, and mathematics Mathematics
*Set (mathematics), a collection of elements
*Category of sets, the category whose objects and morphisms are sets and total functions, respectively
Electro ...
*
Stack
Stack may refer to:
Places
* Stack Island, an island game reserve in Bass Strait, south-eastern Australia, in Tasmania’s Hunter Island Group
* Blue Stack Mountains, in Co. Donegal, Ireland
People
* Stack (surname) (including a list of people ...
*
Stream
A stream is a continuous body of surface water flowing within the bed and banks of a channel. Depending on its location or certain characteristics, a stream may be referred to by a variety of local or regional names. Long large streams ...
References
{{DEFAULTSORT:List (Computing)
Data types
Composite data types
Abstract data types