## Outline - Abstract Algebraic Data types - Elementary types - List - Stack - Queue - Set - Searching algorithms - Tree - Binary - General - BST - AVL - A234 ## Abstract Algebraic Data Types ### Signature and hierarchy - a signature is composed by - a type (integer, stack, queue, graph) - an operations (name: profile) - Exemple: - ``insert: list x integer x element -> list`` - ``insert(l, i, e)`` - return a result of type `list` - We can use the `_`to pass an argument without parentheses - `facotrial: interger -> integer`= `_!: interger -> integer` - `power: integer x integer -> integer`= `_^_: integer x integer -> integer` - Operations - `0: -> integer` - `false: -> boolean` - `pi: -> real` - Types - Boolean - Opération: - `false: -> boolean` - `true: -> boolean` - `not_: boolean -> boolean` - `_and_: boolean x boolean -> boolean` - `_or_: boolean x boolean -> boolean` - Vectors (defined type) - Uses: integer and element (predefined types) - Operations: - `modify: vector x integer x element -> vector` (internal operation) - `nth: vector x integer -> element` (observers) - `lowerlimit: vector -> integer` (observers) - `upperlimit: vector -> integer` (observers) - Use - `nth(v, i+2)` > Every time that an operation return a defined type, is a **internal operation.** An internal operation will really modify the data > **An observer** is when there is AT LEAST 1 defined type vector and who return a predefined type. The observer just look into the data and return the selected value, but he don't change any values.