A static array is helpful for faster access, but it is inefficient for insertion/deletion operations. This can be the preferred choice in the following scenarios.
- Applications always operate with a smaller amount of data.
- Requires frequent access to the data while having minimal insertion/deletion operations.
- Also, use the static array if the Insertion and deletion operations always occur at the last position.
1. Representation
// Mmaximum capacity #define CAPACITY 10 // Array data int array[CAPACITY]; // Number of elements currently stored in Array int size = 0;
2. C++ Example for Array Insertion and Deletion
/** * C++ example to demonstrate Array data structure */ #include <iostream> using namespace std; // Mmaximum capacity #define CAPACITY 10 /** * Array implementation */ class Array { // Array data int array[CAPACITY]; // Size of the array int size; public: // Constructor Array() : size(0) {} // Insert an element into the given position void insert_at(int element, int pos); // Delete an element by the given position void delete_at(int pos); // Search the given element and return the position // Returns the index if found, -1 otherwise. int search(int element); // Access the element at given position // Returns the element int get(int pos); // Traverse and print the elements void traverse(const std::string& msg); }; void Array::insert_at(int element, int pos) { // Step 1. Check if the Array is full. If true, return error. if (size >= CAPACITY) { throw std::runtime_error("array capacity reached"); } // Step 2. Check if the given position is out of data range. If true, return error. // Allow to insert at the end of array anyway. if (pos < 0 || pos > size) { throw std::runtime_error("position out of insertion range"); } // Step 3. Free up the space for the new element by shifting the elements to next position. for (int i=size ; i > pos ; --i) { array[i] = array[i-1]; } // Step 4. Insert the new element at the given position array[pos] = element; // Step 5. Increment the size by 1 ++size; } void Array::delete_at(int pos) { // Step 1. Check if the given position is out of data range. If true, return error. if (pos < 0 || pos >= size) { throw std::runtime_error("position out of data range"); } // Step 2. Delete the element by shifting the elements to previous position. for (int i=pos; i < (size-1); ++i) { array[i] = array[i+1]; } // Step 3. Decrement the size by 1 --size; } int Array::search(int element) { // Step 1. Traverse the array from the first position for (int i=0; i < size; i++) { // Step 2. Check if the element exists in the position. If true, return the position. if (array[i] == element) { return i; } } // Step 3. If the element is not found after the traversal, return -1 return -1; } int Array::get(int pos) { // Step 1. Check if the given position is out of array range. If true, return error. if (pos < 0 || pos >= size) { throw std::runtime_error("position out of data range"); } // Step 2. Return the element at the given position return array[pos]; } void Array::traverse(const std::string& msg) { cout << msg << endl; cout << "["; for (int i=0; i < size; i++) { cout << " " << array[i]; } cout << " ]" << endl; } int main() { // Creating an Array Array arr; // Insert elements arr.insert_at(0, 0); arr.traverse("Array after insert_at(0, 0)"); //==> [ 0 ] arr.insert_at(10, 1); arr.traverse("Array after insert_at(10, 1)"); //==> [ 0, 10 ] arr.insert_at(20, 2); arr.traverse("Array after insert_at(20, 2)"); //==> [ 0, 10, 20 ] arr.insert_at(5, 1); arr.traverse("Array after insert_at(5, 1)"); //==> [ 0, 5, 10, 20 ] arr.insert_at(15, 3); arr.traverse("Array after insert_at(15, 3)"); //==> [ 0, 5, 10, 15, 20 ] cout << "Access element at index 3 = " << arr.get(3) << endl; cout << "Searching element 5 found at index = " << arr.search(5) << endl; // Delete elements arr.delete_at(1); arr.traverse("Array after delete_at(1)"); //==> [ 0, 10, 15, 20 ] arr.delete_at(2); arr.traverse("Array after delete_at(2)"); //==> [ 0, 10, 20 ] return 0; }
Output
Array after insert_at(0, 0)
[ 0 ]
Array after insert_at(10, 1)
[ 0 10 ]
Array after insert_at(20, 2)
[ 0 10 20 ]
Array after insert_at(5, 1)
[ 0 5 10 20 ]
Array after insert_at(15, 3)
[ 0 5 10 15 20 ]
Access element at index 3 = 15
Searching element 5 found at index = 1
Array after delete_at(1)
[ 0 10 15 20 ]
Array after delete_at(2)
[ 0 10 20 ]
3. Operations of static Array
3.1. Insertion at the specific index
Algorithm
- Check if the Array is full. If true, return the error.
- Check if the given position is out of the data range. If true, return the error.
- Free up the space for the new element by shifting elements to the next position.
- Insert the new element at the given position
- Increment the size by 1
Examples
An example workflow is provided here to insert the elements in an empty array with a capacity of 10. The array size is initially 0 for the empty array and will be incremented during insertion.
1. Insert element 0 at index 0
- The array is empty at this stage, so insert directly at index 0.
2. Insert element (10) at index 1
- No other elements are present at the requested index 1, so insert the element directly.
3. Insert element (20) at index 2
- Repeat the same workflow since no other elements are present at the requested index 2.
4. Insert element (5) at index 1
- The insertion is requested for index 1, but this is already occupied.
- Hence, free up the index by shifting elements 10 and 20 to one position right.
- Finally, insert the new element at index 1.
5. Insert element (15) at index 3
- The insertion is requested for index 3, but this is already occupied.
- Hence, free up the index by shifting element 20 to one position right.
- Finally, insert the new element at index 3.
3.2. Deletion at the specific index
Algorithm
- Check if the given position is out of the data range. If true, return the error.
- Delete the element by shifting elements to the previous position.
- Decrement the size by 1
Examples
The following example illustrates the delete operations in the following array.
1. Delete the element at index 1
- Index 1 is located in the middle since there are elements at indexes 2, 3, and 4.
- Hence shift the elements at indexes 2, 3, and 4 to one position left.
- The element at index (1) is now replaced.
2. Delete the element at index 2
- Index 2 is located in the middle since there is an element at index 3.
- Hence shift the element at index 3 to one position left.
- The element at index (2) is now replaced.
3. Delete the new element at index 2
- The shifting is not required since index 2 is the last element now.
- The element at index (2) is deleted by simply reducing the array size by 1.
3.3. Search an element in the Array
Algorithm
- Traverse the array from the first position
- Check if the element exists in the position. If true, return the position.
- If the element is not found after the traversal, return -1
Examples
Searching for an element in the array requires a linear search. So, we need to iterate the array from index 0 to the array size. Return the index once the element is found.
1. Seach for element (10)
- Iterate the array from index 0 and look for the element.
- So, searching the element (10) returns index 2.