Time limit: 5000ms Memory limit: 256mb Description: Complete the following implementation of Array ADT. #include <stdio.h> #include <stdlib.h> #include <string.h> struct Array; struct Array* createArray(int n); int retrieve(struct Array* arr, int i); void store(struct Array* arr, int i, int itemToStore); void insertInplace(struct Array* arr, int i, int item); void delete(struct Array* arr, int i); int maximum(struct Array* arr); int main() { int T; struct Array* arr; scanf("%d", &T); for (int i = 0; i < T; i++) { char cmd[1024]; scanf("%s", cmd); if (strcmp("createArray", cmd) == 0) { int n; scanf("%d", &n); arr = createArray(n); } if (strcmp("retrieve", cmd) == 0) { int i; scanf("%d", &i); printf("%d\n", retrieve(arr, i)); } if (strcmp("store", cmd) == 0) { int i, item; scanf("%d%d", &i, &item); store(arr, i, item); } if (strcmp("insertInplace", cmd) == 0) { int i, item; scanf("%d%d", &i, &item); insertInplace(arr, i, item); } if (strcmp("delete", cmd) == 0) { int i; scanf("%d", &i); delete(arr, i); } if (strcmp("maximum", cmd) == 0) { printf("%d\n", maximum(arr)); } } } /* Please keep the code above unchanged * You can only edit the following code */ // The Array ADT struct Array { int size; int *data; }; // Initialize an array of size n and set all elements to 0. If n < 0, make an // array of size 0 and output "error". struct Array* createArray(int n) { // WRITE YOUR OWN CODE HERE } // Return the item stored in the i-th position of the array. If i is out of // range, return -1 and output "error". int retrieve(struct Array* arr, int i) { // WRITE YOUR OWN CODE HERE } // Store item to the i-th position of array. If i is out of range, just output // "error". void store(struct Array* arr, int i, int itemToStore) { // WRITE YOUR OWN CODE HERE } // Drop the last item, move i-th item and other items after the i-th position // afterward, and insert item to the i-th position. If i is out of range, just // output "error". void insertInplace(struct Array* arr, int i, int item) { // WRITE YOUR OWN CODE HERE } // Delete item in the i-th position, move other items after the i-th position // forward and set the last element to 0. If i is out of range, just output // "error". void delete(struct Array* arr, int i) { // WRITE YOUR OWN CODE HERE } // Return the maximum element in the array. If the size of array is 0, return -1 // and output 'error'. int maximum(struct Array* arr) { // WRITE YOUR OWN CODE HERE } Sample input: 25 createArray 3 retrieve 0 retrieve 1 retrieve 2 store 0 1 store 1 2 store 2 3 store 3 4 retrieve 0 retrieve 1 retrieve 2 retrieve 3 maximum insertInplace 1 3 retrieve 0 retrieve 1 retrieve 2 delete 0 retrieve 0 retrieve 1 retrieve 2 delete -1 retrieve -1 createArray -100 maximum Sample output: 0 0 0 error 1 2 3 error -1 3 1 3 2 3 2 0 error error -1 error error -1