A list is perhaps the most intuitive way to store data, and we have developed many ways to sort and search through lists perhaps for this reason. However, only using a simple 1D array list is highly limiting when computer scientists have spent decades inventing and improving a vast range of other data structures.
In essence, all a data structure is a specific way or organizing and storing data so that the computer can use it efficiently. Each one has advantages and disadvantages in different areas as they are often developed for a specific type of usage. As a whole, however, they aim to provide fast, easy-to-understand ways to work with large amounts of data without getting overwhelmed. Here are some of the common data structures:
- linked lists
- AVL trees
- Red-black trees
- hash tables
- priority queues
An efficient data structure makes for an efficient algorithm so it is highly important that you can judge which to pick for your specific application requirements. Most university computer science programs will have some form of data structures for exactly this reason. In fact, some formal design methods and programming languages even emphasize data structures over the traditional algorithm-focused approach.
Most data structures are simply different ways of using the computer's ability to fetch and store data using a memory address. For example, records and arrays compute these addresses using arithmetic operations, while linked lists and the like store the addresses of their elements actually in their own structure. It is also common for structures to use a combination of these two approaches - and often quite a complex combination at that. Data structures are handled at a higher level of programming, where syntax for their use is often built in, but assembly languages have a much more basic access to the fetch and store cycle so it is challenging to program a data structure directly in low-level assembly code. Most languages, however, do come with some sort of library feature to allow their data structure implementations to be portable between programs and systems.