There are two types of data types in programming languages: primitive/system defined types and user defined types. Primitive types include integers and floats, while user defined types are created by programmers, such as classes and structures. Data structures organize data to allow for operations to be performed efficiently, and include linear structures like arrays which are accessed sequentially and non-linear structures like trees which allow non-sequential access. Abstract data types combine data structures with their operations and consist of the data representation and operations performed on that data.