Open In App

Static and Dynamic Data Structures

Last Updated : 06 Jun, 2024
Improve
Improve
Like Article
Like
Save
Share
Report

Data structures are the fundamental building blocks of computer programming. They determine how data is organized, stored, and manipulated within a software application. There are two main categories of data structures: static and dynamic. Static data structures have a fixed size and are allocated in memory during compile-time, while dynamic data structures can grow and shrink in size during runtime. This article will provide an overview of the key differences between static and dynamic data structures, their use cases, and the trade-offs to consider when choosing between them.

What is Static Data Structure?

Static data structures are characterized by their fixed size and predefined memory allocation. This means that the amount of memory allocated to the structure is determined at compile time and remains constant throughout the program’s execution. Examples of static data structures include arrays .

Features of Static Data Structures:

There are many features of static data structures. Let’s discuss the most popular of them:

  • Memory Allocation: 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 Deallocation: Memory allocated to the static data structures deallocates when they go out of scope or the program ends.
  • Continuous Memory Allocation: 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 the memory location.

Advantages of Static Data Structures:

  • Static data structures have a fixed size and structure, making them simpler to implement and understand.
  • Since the size is known in advance, the memory can be allocated efficiently.
  • The behavior of static data structures is more predictable, making them suitable for real-time systems.
  • Accessing elements in static data structures is generally faster than in dynamic data structures.

Disadvantages of Static Data Structures:

  • The size and structure of static data structures are fixed, which can lead to inefficient memory usage if the data requirements change.
  • Static data structures have a predefined size, limiting their ability to handle large and varying amounts of data.
  • If the data size is smaller than the allocated memory, the unused memory is wasted.
  • Expanding the size of a static data structure requires complex procedures, such as creating a new, larger structure and copying the data.

Examples of Static Data Structures:

Array : An array is a collection of elements identified by index or key values. The size of the array is specified at the time of creation and remains constant. For example, an array of integers can be declared as int arr[8]; in C++, which creates an array of size 8.


Memory-Representation-of-Array-(1)


Note: Problem with above Array implementation: Once we create the Array we cannot alter the size of the array. So the size of the array is unalterable

Implementation:

C++
#include <iostream>
using namespace std;

int main()
{
    // Declaration of an array of size 6
    int array[6];

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

    return 0;
}
Java
public class Main {
    public static void main(String[] args)
    {
        // Declaration of an array of size 6
        int[] array = new int[6];

        // initialize and printing values of array elements
        for (int i = 0; i < 6; i++) {
            array[i] = i;
            System.out.print(array[i] + " ");
        }
        System.out.println();
    }
}
Python
def main():
    # Declaration of a list of size 6
    array = [0] * 6

    # initialize and printing values of array elements
    for i in range(6):
        array[i] = i
        print(array[i], end=" ")
    print()


if __name__ == "__main__":
    main()
JavaScript
function main() {
    // Declaration of an array of size 6
    let array = new Array(6);

    // Initialize and print values of array elements
    for (let i = 0; i < 6; i++) {
        array[i] = i;
        process.stdout.write(array[i] + " ");
    }
    console.log();
}

// Call the main function to execute the code
main();

Output
0 1 2 3 4 5 

In the above code: we declared an array of the fixed size. After that, we initialize some value using a loop and printed them.

What is Dynamic Data Structure?

Dynamic data structures are flexible in size and can grow or shrink as needed during program execution. This adaptability makes them suitable for handling data of varying sizes or when the size is unknown beforehand. Examples of dynamic data structures include linked lists, stacks, queues, and trees.

Features of Dynamic Data Structures:

There are many features of dynamic data structures. Let’s discuss the most popular of them:

  • Dynamic Memory Allocation: Dynamic data structures allocate memory at runtime, rather than being pre-allocated at compile-time. This memory is stored in the program’s heap.
  • Flexible Memory Usage: Unlike static data structures, the memory used by dynamic data structures is not limited to a fixed size. It can expand or contract as needed during program execution.
  • Manual Memory Management: The memory allocated to dynamic data structures does not automatically deallocate when the structure goes out of scope. The programmer is responsible for manually deallocating this memory, often using functions like free() or delete(), to avoid memory leaks.
  • Non-Contiguous Memory: The memory locations used by dynamic data structures are not guaranteed to be contiguous. This means additional metadata must be stored to track the locations of each element within the data structure.

Advantages of Dynamic Data Structures:

  • Dynamic data structures can grow or shrink in size as needed, allowing for efficient use of memory.
  • They can allocate and deallocate memory dynamically, preventing wastage of memory.
  • Dynamic data structures can handle large and varying amounts of data without pre-defining the size.
  • They provide a simpler programming interface compared to static data structures.

Disadvantages of Dynamic Data Structures:

  • Dynamic memory allocation and deallocation can incur additional overhead compared to static data structures.
  • Dynamic data structures can be more complex to implement and maintain than static data structures.
  • Improper handling of dynamic memory can lead to memory leaks, which can cause performance issues.
  • The performance of dynamic data structures can be less predictable than static data structures, especially in real-time systems.

Examples of Dynamic Data Structures:

Linked List : Linked Lists are linear data structures where the elements are not stored in contiguous locations and every element is a separate object with a data part and address part. The elements are linked using pointers and addresses. Each element is known as a node. Due to the dynamicity and ease of insertions and deletions, they are preferred over the arrays.


Singly-Linked-List-(1)


Implementation:

C++
#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 = NULL;

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

    return 0;
}
Java
public class LinkedList {
    int data;
    LinkedList next;

    public static void main(String[] args)
    {
        // creating a linked list
        LinkedList node1 = new LinkedList();
        node1.data = 1;

        LinkedList node2 = new LinkedList();
        node2.data = 2;

        LinkedList node3 = new LinkedList();
        node3.data = 3;

        // linking all the nodes
        node1.next = node2;
        node2.next = node3;
        node3.next = null;

        // printing value of linked list
        System.out.println(node1.data + " " + node2.data
                           + " " + node3.data);
    }
}

// This code is contributed by Shivam
Python
class LinkedList:
    def __init__(self):
        self.data = None
        self.next = None


# creating a linked list
node1 = LinkedList()
node1.data = 1

node2 = LinkedList()
node2.data = 2

node3 = LinkedList()
node3.data = 3

# linking all the nodes
node1.next = node2
node2.next = node3
node3.next = None

# printing value of linked list
print(node1.data, node2.data, node3.data)

# This code is contributed by shivam
JavaScript
class LinkedList {
    constructor(data) {
        this.data = data;
        this.next = null;
    }
}

function main() {
    // creating a linked list
    let node1 = new LinkedList(1);
    let node2 = new LinkedList(2);
    let node3 = new LinkedList(3);

    // linking all the nodes
    node1.next = node2;
    node2.next = node3;
    node3.next = null;

    // printing value of linked list
    let currentNode = node1;
    let output = "";
    while (currentNode !== null) {
        output += currentNode.data + " ";
        currentNode = currentNode.next;
    }
    console.log(output.trim());
}

main();

Output
1 2 3

In the above code: A class LinkedList is defined with two members: data (an integer) and next (a pointer to the next node) and three nodes (node1, node2, node3) are created with data values of 1, 2, and 3 respectively. These nodes are then linked together to form a linked list: node1 points to node2, node2 points to node3, and node3 points to NULL, indicating the end of the list. Finally, the data values of the nodes are printed out, resulting in the output 1 2 3.

Difference between Static and Dynamic Data Structure:

Below are the comparison of static and dynamic data structure:

Feature Static Data Structure Dynamic Data Structure
Memory Allocation Memory allocation size is fixed at compile time Memory allocation size can be adjusted at runtime
Flexibility Not flexible, size cannot be changed once allocated Flexible, size can be adjusted as needed
Efficiency Typically more memory efficient May be less memory efficient due to dynamic resizing
Performance Generally faster access and manipulation May have slower access and manipulation due to dynamic resizing
Examples Arrays, Linked Lists (with fixed size) Linked Lists (with dynamic size), Stacks, Queues
Implementation Typically implemented using arrays Implemented using pointers or dynamic memory allocation
Usage Suitable for applications with fixed-size requirements Suitable for applications with dynamic size requirements, or where size is unknown upfront


Previous Article
Next Article

Similar Reads

How to Check the Accessibility of the Static and Non-Static Variables by a Static Method?
The static keyword is a non - access modifier in Java which can be used for variables, methods, and block of code. Static variables in Java belong to the class i.e it is initialized only once at the start of the execution. By using static variables a single copy is shared among all the instances of the class, and they can be accessed directly by cl
3 min read
Static Data Structure vs Dynamic Data Structure
Data structure is a way of storing and organizing data efficiently such that the required operations on them can be performed be efficient with respect to time as well as memory. Simply, Data Structure are used to reduce complexity (mostly the time complexity) of the code. Data structures can be two types : 1. Static Data Structure 2. Dynamic Data
4 min read
Difference between static and non-static method in Java
A static method is a method that belongs to a class, but it does not belong to an instance of that class and this method can be called without the instance or object of that class. Every method in java defaults to a non-static method without static keyword preceding it. Non-static methods can access any static method and static variable, without cr
6 min read
Difference between static and non-static variables in Java
There are three types of variables in Java: Local VariablesInstance VariablesStatic Variables The Local variables and Instance variables are together called Non-Static variables. Hence it can also be said that the Java variables can be divided into 2 categories: Static Variables: When a variable is declared as static, then a single copy of the vari
4 min read
Understanding storage of static methods and static variables in Java
In every programming language, memory is a vital resource and is also scarce in nature. Hence it’s essential that the memory is managed thoroughly without any leaks. Allocation and deallocation of memory is a critical task and requires a lot of care and consideration. In this article, we will understand the storage of static methods and static vari
4 min read
Class Loading and Static Blocks Execution Using Static Modifier in Java
Static is a keyword which when attached to the method, variable, Block makes it Class method, class variable, and class Block. You can call a static variable/method using ClassName. JVM executes the static block at “CLASS LOADING TIME” Execution Order: There is an order in which static block/method/variable gets initialized. Static BlockStatic Vari
3 min read
Difference Between Static and Non Static Nested Class in Java
Nested classes are divided into two categories namely static and non-static. Nested classes that are declared static are called static nested classes. Non-static nested classes are called inner classes. A class can either be static or non-static in java. So there is a lot of difference between making a class static or non-static. There are two kind
4 min read
Static and non static blank final variables in Java
A variable provides us with named storage that our programs can manipulate. There are two types of data variables in a class: Instance variables : Instance variables are declared in a class, but outside a method, constructor or any block. When a space is allocated for an object in the heap, a slot for each instance variable value is created. Instan
5 min read
Understanding "static" in "public static void main" in Java
Following points explain what is "static" in the main() method: main() method: The main() method, in Java, is the entry point for the JVM(Java Virtual Machine) into the java program. JVM launches the java program by invoking the main() method. Static is a keyword. The role of adding static before any entity is to make that entity a class entity. It
3 min read
Why non-static variable cannot be referenced from a static method in Java
Java is one of the most popular and widely used programming language and platform. Java is Object Oriented. However, it is not considered as a pure object-oriented as it provides support for primitive data types (like int, char, etc). In java, methods can be declared as either static or non-static. In this article, let's discuss why non-static vari
4 min read
three90RightbarBannerImg