# Eight Data Structures Every Programmer Has To Know

For programmers, algorithms and data structures are their most essential subjects—a programmer’s bread and butter if you will. If you want to enter the field of programming and hit the ground running, you’ll need to master the most common data structures and boost your resume with in-demand skills.

Here, we’ll explore the eight most important data structures every programmer should know, including what they do and where to use them. To start, let’s gain a fundamental understanding of what a data structure is.

**What is a Data Structure?**

Data structures are methods of storing and organizing data in a computer system so that operations can be performed upon them more efficiently. When data is “unstructured,” it does not have a defined data model or is not organized in a manner that is conducive to operations or analysis.

Unstructured data is a common problem at organizations that have collected data but haven’t been storing or organizing it effectively. It is estimated that **80% of the world’s data is unstructured.**^{1}

Data structures take the form of different layouts, each of which is efficient for some operations but inefficient for others. The goal of the programmer is to determine which data structures are suitable for the data on hand so that that data can be leveraged to solve problems.

**Eight Data Structures to Master**

Below are some of the most important data structures to be aware of. This isn’t an exhaustive list, and you can experiment to create your own data structures. But these are the building blocks that can help you establish a career in programming and data analysis.

**1. Arrays**

One of the simplest data structures, an array is a collection of items that are stored sequentially. An array contains values or variables—known as “elements”—of the same data type and is of a fixed size, so you cannot change the size of an array. Each item in an array is indexed starting with 0.

The best way to think about an array is like a weekly medication organizer. It includes small containers lined up in a sequence, and each container has elements inside.

Arrays are commonly used as structures for building other, more complicated data structures. They are also used for sorting algorithms.

**2. Linked Lists**

A linked list is a sequence of items arranged in a linear order all connected to each other. This means you must access data in order, so random access to data is not possible.

Each element in a linked list is called a “node,” and each node contains a key and a pointer. The pointer directs you to the next node, called a “next.” The sequence starts with a “head,” which directs you to the first element within the list. The last element of this list is known as the “tail.”

You can create a singly linked list, which lets you traverse each item in a forward direction from the head to the tail. Similarly, you can create a doubly-linked list, which can be traversed both forward and backward. And finally, you can create a circular linked list in which the next pointer of the tail points to the head and vice versa, forming a circle.

Linked lists are used for symbol table management in switching between programs using Alt + Tab (On a PC).

**3. Stacks**

A stack works almost exactly as it sounds. It’s like stacking elements within a tall container.

Stacks are known as LIFO (Last In First Out) structures. This means the element placed last can be accessed first. You can “push” a new element onto the top of the stack, or you can “pop,” deleting the element inserted last which is at the top of the stack.

Stacks are commonly used for parsing and evaluating mathematical expressions and to implement function calls in recursion programming.

**4. Queues**

A queue functions similarly to a stack, but instead of being a LIFO structure, it is a FIFO (First In First Out) structure. The easiest way to think about a queue is to think of a line of people waiting to enter a building. The person at the beginning of the line will enter the building first, while the person at the end will enter last.

You can enqueue an element in this structure, which means inserting the element to the end of the queue. You can also dequeue an element, which means deleting an element from the beginning of the queue.

Queues are often used to manage threads in multithreading, and they are (not surprisingly) used to implement priority queuing systems.

**5. Hash Tables**

A hash table structure associates each value with a key and then stores them. This makes it easy to look up values efficiently using a key. It’s an efficient way to insert and search for data regardless of its size, as it makes it easy to identify a specific object from a group of similar objects.

For example, if you go to college, you may be assigned a unique student ID number. This ID number is a key that can be used to retrieve information about you and your student record.

A hash table uses what’s known as a “hash function” to map a data set of any size to one of a fixed size—the hash table. The values that a hash function returns are known as “hash values.”

Hash tables are commonly used to create database indexes, to create associative arrays and to create a “set.”

**6. Trees**

A tree is a structure similar to a linked list because each item is linked. But in a tree items are linked in a hierarchal fashion, just like you might see in a visual representation of someone’s family tree. There are various types of trees, each suited to different applications.

For example, a binary search tree (BST) stores data in sorted order with every node in the binary comprised of the following attributes:

- Key (the value saved in the node)
- Left (pointer to the left child node)
- Right (pointer to the right child node)
- P (pointer to the parent node)

Binary search trees are used in many different types of search applications. Other types of trees are used in wireless networking and to create expression solvers.

**7. Heaps**

Similarly, a heap is a type of binary tree in which the parent nodes are compared to their children. This allows the values within the nodes to be arranged accordingly. Heaps can be represented as trees, but they can also be represented as binary arrays.

There are two types of heaps. In a min heap, the parent’s key is less than or equal to the keys of its children. In a max heap, the parent’s key is greater than or equal to the keys of its children.

Heaps are often used in algorithms to create priority queues, and to find the smallest or largest value in an array.

**8. Graphs**

A graph is an abstract, non-linear data structure that is made of a finite set of nodes that are connected by edges. The nodes may be referred to as “vertices” and contain values, whereas the edges are simply lines or arcs that connect two nodes in the graph.

Graphs are often used to represent networks, such as circuit networks or even paths in a city. They're great for solving real-world problems, but they can also be used as representations of digital networks.

For example, on Facebook, each user could be represented with a node (or vertex). Each vertex could then contain information about that user, and each edge could represent their connection with another user.

**Practice and Experiment with Data Structures to Gain Mastery**

Once you have a foundational understanding of data structures, you can practice and even experiment with building new ones. Eventually, you’ll gain mastery over data structures that will open doors to new career opportunities in programming and data science.

If you’re looking to break into a new programming career, start by getting the in-demand data science skills companies are looking for. Explore the online data science courses offered by EmergingEd to see how you can gain a career advantage.