This document discusses algorithms and data structures. It covers the requirements of algorithms including inputs, outputs, unambiguousness, generality, correctness, being finite, and efficiency. It also discusses representing algorithms through pseudo-code and flowcharts. Some key aspects of pseudo-code are described such as its purpose to define algorithms simply and its use of limited vocabulary and English-like notation. Common control structures like sequence, selection, and repetition are explained. Examples of bubble sort, selection sort, and insertion sort algorithms are also mentioned.