# data[].attributes.body
Any method used to store data in an organised and accessible format. Usually contains data that is related. Lot of data Structures - arrays, files, stacks

# data[].attributes.body
ADT is a data type, where only behaviour is defined but not implementation.
Array, List, Map, Queue, Set, Stack, Table, Tree and Vectors are ADTS. Opposite is Concrete Data Type, where it contains and implementation of ADT.

Book is ADT
Telephone Book is an implementation (CDT)

# data[].attributes.body
An array is a list or table of data that has a variable that identifies the list/table.
Each item is called an element
An array can have multiple dimensions - but most are usually either one or two dimensional.
Some programming languages require the array size to be set when it is initialized

# data[].attributes.body
Two common portable formats we can use when programming are text files and binary files.
Text files can be read by a human. Each line is known as a record. On each line you can have multiple items of data - called fields.
All files have an internal structure

# data[].attributes.body
Work like normal files, but its stored as 0's, and 1's
Binary files contain binary codes which may also include header information.
A PNG is an example of a Binary File.

# data[].attributes.body
Stores a set amount of data
Allocates a set amount of memory
Accessing the elements is quick and easy as the location is fixed
It'll use all the allocated memory regardless of whether is it being used

# data[].attributes.body
Using less memory - uses a heap
Unused memory blocks are placed on a heap - they can be used within a program
Dynamic data structures can take more memory off the heap when needed and put it back if its not
Much more efficient and scalable
Stacks, queues and binary trees = usually dynamic

# data[].attributes.body
A stack is an example of LIFO
Stacks are an abstract data type that could be implemented as dynamic or static
Adding = pushing
Removing = popping
Peeking = identifies the top of the stack
Stack Overflow - when more memory is needed but none is available

# data[].attributes.body
FIFO
Queue is like a bus line queue
Queues are used when a hard disk is sending data to the CPU is an example. It joins the queue to be processed.
Two pointers - Front and Rear
Front pointer moves when the item at the front has been dealt with
Rear Pointer doesn't move unless something is added to the back of the Queue
Linear, Circular, Priority

# data[].attributes.body
Data structure that stores key/value pairs based on an index calculated from an algorithm.
A hash table is made from an a table and a key which identifies the location
Hashing algorithm is carried out on the key - this acts as an index

# data[].attributes.body
Abstract Data Type that maps keys into data. Requires Random Access. Can add retrieve and delete data. Key can represent something. For example hello as the key and hola as the dictionary definition.