This document contains notes from a data structures and algorithms class. It defines data structures as organized ways to store and access data efficiently. Good data structures allow for easy retrieval, access, and manipulation of data. Different types of data structures are discussed, including static vs dynamic, linear vs non-linear, and homogeneous structures. Common operations on data like insertion, deletion, searching and sorting are also defined. The document then defines algorithms as step-by-step instructions to solve problems, and discusses analyzing algorithms to determine their time and space complexity as input size increases. Asymptotic notation for describing how complexity grows is also introduced.