## 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` - `lowerlimit: vector -> integer` (observers) - `upperlimit: vector -> integer` - Use - `nth(v, i+2)` > Every time that an operation return a defined type, is a **internal operation.** > **An observer** is when there is AT LEAST 1 defined type vector and who return a predefined type