# Data structures and algorithms

A good knowledge of data structures and algorithms is key to solving difficult problems as a programmer.

## Table of contents

## Data structures

A data structures is a representation of data with a collection of associated operations [1, P. 5].

Data structures are implementations of abstract data types [1, P. 4].

## Algorithms

An algorithm is a procedure that takes input and produces output to accomplish a specific task [2, P. 3].

An algorithm should solve a general, well-specified problem. A specification for an algorithm should include the complete set of instances it will operate on, and the algorithms output after running on one of these instances [2, P. 3].

A good algorithm is:

- Correct
- Efficient
- Easy to implement

It’s often not possible to achieve all three aims.

## References

- [1] P. Morin,
*Open Data Structures*, 1st ed. AU Press, 2013. - [2] S. Skiena,
*The Algorithm Design Manual*, 2nd ed. Springer, 2008.