Prabhdeep Singh

What Are Static and Dynamic Data Structures?

In static data structures memory is allocated at the compiler time for static data structures and user cannot change their size after being compiled but, we can change the data which is stored in them. In case dynamic data structure memory is allocated at the run time for dynamic data structure and the size of the dynamic data structures varies at the run-time of the code.

Takeaways

In static data structure memory is allocated contiguously whereas in dynamic data structures, memory is not provided contiguously

What is a Static Data Structure?

Data structures that are of a fixed size are called static data structures. Memory is allocated at the compiler time for static data structures and user cannot change their size after being compiled but, we can change the data which is stored in them.

The fixed size provides many benefits as well as a lot of drawbacks to static data structures. With the fixed memory allocation, there is no need to worry about the overflow and underflow while inserting or deleting the element in/from the static data structures but it consumes a lot of memory and is not space-efficient.

Arrays are the best example of static data structures as they are of a fixed size and we can modify their data later.

As the memory is provided at the compile time for static data structures all the memory allocated is contiguous so there is no need to worry about the memory address of all the elements, user only needs to store the address of the first element and other element’s location can be easily found.

What is Dynamic Data Structure?

Data structures that are of the dynamic size are called dynamic data structures. Memory is allocated at the run time for dynamic data structure and the size of the dynamic data structures varies at the run-time of the code. Also, both the size and the elements stored in the dynamic data structure can be changed at the run time of the code.

The dynamic size provides many benefits as well as a lot of drawbacks of dynamic data structures. With the dynamic memory allocation, there is no memory loss occurs and we can allocate space equal to the required number of elements. Users must have to check and carefully insert or delete data in/from the dynamic data structure to be safe from overflow and underflow conditions.

Linked lists and trees are common examples of dynamic data structures and a list of examples for dynamic data structures is never-ending.

As the memory allocated at the run time for the dynamic data structures makes allocated memory non-contiguous which decreases the performance of dynamic data structures because we have to create another variable to store the address of their allocated memory.

Features of Static Data Structures

There are many features of static data structures.

Let’s discuss the most popular of them :

  • For static data structures, static memory is allocated at the compile time by the compiler which is stored in the stack memory of the program.
  • Memory allocated to the static data structures deallocates when they go out of scope or the program ends.
  • As we have discussed above, continuous memory is allocated to the static data structures, which means there is no need to store the structural information of the data structure or explicit data variable to store the information of memory location.

Features of Dynamic Data Structures

There are many features of dynamic data structures.

Let’s discuss the most popular of them :

  • For dynamic data structures, dynamic memory is allocated at the rum time which is stored in the heap memory of the program.
  • Memory allocated to the dynamic data structures doesn’t deallocate when they go out of scope which may cause the memory leak problem.
  • Memory of Dynamic data structure only gets deallocated when the program ends or the user deallocates it manually by using the free() function in C, delete() function in C++, etc.
  • Memory allocated to the dynamic data structures is not contiguous, which means users have to store the structural information of data structure or explicit data variable to store the information of each memory location.

What is the Difference between Static and Dynamic Data Structure?

Static and dynamic data structures allow programmers to store data with different benefits. Both static and dynamic data structure provides some advantage and disadvantages to store the data.

Let’s see some differences between the static and dynamic data structures :

  • Size :
    Size is the main difference between static and dynamic data structures. Static data structures are of fixed size while dynamic data structures have a dynamic size, which can be increased or decreased.
  • Memory allocation :
    For the static data structures, a fixed size of memory is allocated by the compiler at the compile time. Also, provided memory is contiguous which means all the data blocks are attached. On the other hand, for dynamic data structure memory is created by the user and allocated at run-time by the program. As memory is of dynamic size, it’s hard to allocate contiguous memory so the data blocks are non-contiguous.
  • Memory deallocation :
    For the static data structures, when the data structure goes out of scope or the program ends, memory is automatically deallocated. For the dynamic data structures, memory is deallocated either when the program ends or the user manually deallocates it by using a free() function in C or the delete() function in C++.
  • Memory Leak :
    No memory leak occurs with static data structures but we cannot use the same memory block again in the same scope of code. A memory leak problem may occur if the user forgets to deallocate the memory but by deallocating memory, the programmer can use the same memory for another purpose in the same code block/scope.
  • Data access :
    As the memory allocated to the static data structures is continuous, this makes it easy to access the data from the static data structure. For example, from arrays, we can access data with just an index number. Data access is not easy from the dynamic data structures, because memory is non-contiguous, so indexing does not work here.
  • Handling :
    To maintain the dynamic data structure, first, we have to create a structure or class to store the data as well as the memory allocated by the program because memory is not continuous and if we lose it once we are not able to use and deallocate it until the end of the program. On the other hand, for static data structure, we don’t have to provide any structure or class which makes them easy to handle.
  • Examples :
    The array is the best example for the static data structures while there is a long list of examples for dynamic data structures like linked lists, trees, heaps, etc.

What are the Advantages and Disadvantages of Static Data Structures?

Advantages :

Static data structures are very useful for programmers and help in many ways.

Let’s see some of its advantages :

  • Static data structures are easy to handle as the compiler handles all the allocation and deallocation processes.
  • Memory is allocated in contiguous form so no need to maintain the structure of the data structure or any other explicit variable to store the memory location.
  • Due to the fixed size user don’t have to worry about overflow or underflow conditions while inserting or deleting any element to the respective data structure.
  • It’s easy to program and data structures like arrays provide random access.

Disadvantages :

Static data structures are very useful for programmers but every good thing has some demerits also.

Let’s see some of the disadvantages of static data structures :

  • Users have to estimate the maximum required space for static data structures which may be more as compared to the actual required and a lot of memory will be lost.
  • Insertion of the new element between two elements present in the static data structure is only possible if there is any vacant space present between them otherwise insertion will take a lot of time.
  • Deletion of the element may create vacant space between two elements and covering up that space is costly concerning time.

What are the Advantages and Disadvantages of Dynamic Data Structures ?

Advantages :

Dynamic data structures are very easy to use as compared to static data structures in terms of memory and have some cool features.

Let’s see some of its advantages :

  • Users don’t have to worry about the maximum or minimum size required because all the work is done by the program itself at runtime.
  • Usually, insertion, and deletion of elements are optimal concerning space and time.
  • As the user can deallocate memory when not needed which helps to reuse the same memory for another purpose. Imagine we have a linked list of character data types and after use, it is no longer required then we can free its memory space and can use it to create a linked list of double data types.

Disadvantages :

Dynamic data structures can have a complex structure and may not be easy to handle for beginners.

Let’s see some of their disadvantages :

  • As the memory allocated at the run time for the dynamic data structures, makes allocated memory non-contiguous which decreases the performance of dynamic data structures because we have to create another variable to store the address of their allocated memory.
  • Allocated memory only deallocates when the program ends or when the user deallocates it manually, so if the user forgets to deallocate then a memory leak may occur.
  • As the size of the data structure is not fixed then overflow or underflow problems may arise in this case.

Examples of Static Data Structure

When we talk about the static data structure, the first name which clicks in our mind is arrays. The array is the best and perfect example of the static data structure. We can define a fixed-sized array and cannot resize it later but we can change the values added to the array.

Let’s take an example for the implementation of the static data structures :

Code :

#include <iostream>
using namespace std;

int main()
{
    // declaration of an array of size 5
    int array[5];

    // defining and printing values of array elements
    for(int i=0;i<5;i++)
    {
      array[i] = i;
      cout<<array[i]<<" ";
    }
    cout<<endl; // changing line

    // changing and printing the values of the array
    for(int i=0; i<5; i++)
    {
      array[i] = 10;
      cout<<array[i]<<" ";
    }

    return 0;
}

Output :

0 1 2 3 4
10 10 10 10 10

Explanation :

In the above code, we declared an array of the fixed size. After that, we assigned some values using a loop and printed them. In the end, we changed all the assigned values and printed them. Here we didn’t allocate or deallocated memory, it is done all by the compiler.

Static Data Structure Example

In the above image, we have shown the working of code, initially, there was an empty array which was later assigned some values, and finally, all the assigned values got updated but the size of the array was fixed all the time and the user is not able to change it.

Examples of Dynamic Data Structure

There are many examples of dynamic data structures like Linked list, Tree, Heap, etc. We can define the size of these data structures according to our needs. We can allocate memory to them and deallocate it when they are no longer needed.

Let’s implement the linked list data structure :

Code :

#include <iostream>
using namespace std;

// defining a linked list
class LinkedList
{
public:
    int data;
    LinkedList* next;
};

int main()
{
    // creating a linked list
    class LinkedList* node1 = new LinkedList();
    node1->data = 1;

    class LinkedList* node2 = new LinkedList();
    node2->data = 2;

    class LinkedList* node3 = new LinkedList();
    node3->data = 3;


    // linking all the nodes

    node1->next = node2;
    node2->next = node3;
    node3->next = nullptr;

    // printing value of linked list
    cout<<node1->data<<" "<<node2->data<<" "<<node3->data<<endl;

    // deallocating memory
    delete(node1);
    delete(node2);
    delete(node3);

    return 0;
}

Output :

1 2 3

Explanation :

In the above code, we have created a class ‘LinkedList’ to maintain the structure of our nodes. Then we used the ‘new’ operator to allocate memory to each node we defined for our LinkedList. By storing the address of node2 in node1 and node3 in node2 we created a linked list. In the end, we deallocated the memory of each node with the help of the delete operator.

Dynamic Data Structure Example

In the above image, we have shown the working code, initially, we created three nodes for the linked list but none of them was connected, which means the size of the linked list is 1. Then we Connected node2 to node1, which increase the size of our linked list by 1, and at last, we connect node3 at the end of node2 making the final size of the linked list 3 which was initially 1. This show the dynamic size of the linked list.

Supercharge Your Coding Skills! Enroll Now in Our DSA Course and Master Algorithmic Excellence.

Conclusion

  • Data structures are the containers in which programmers can store the data in an organized way such that it can be used later efficiently.
  • Static data structures are of fixed size and memory is allocated at the compile time by the compiler and deallocates when they go out of scope or program ends.
  • Dynamic data structures are of dynamic size and memory is allocated at the runtime for them by the program.
  • Memory is deallocated for dynamic data structure only when the program ends or the user deallocates it manually by using the free() function in C or delete() function in C++.
  • For static data structures, users don’t have to provide the structure because memory is allocated contiguously.
  • For dynamic data structures, memory is not provided contiguously so users have to provide an external structure to store the location.
  • The array is the popular and perfect example of static data structure while linked lists, trees, heaps, etc are examples of dynamic data structures.

Learn More about Data Structures

To learn more and explore in deep about Data Structures please visit the article :

Author