Dynamic Array in C

Snow Howler is the librarian at the central library of the city of HuskyLand. He must handle requests which come in the following forms:
1 x y: Insert a book with y pages at the end of the xth shelf.
2 x y: Print the number of pages in the yth book on the xth shelf.
3 x: Print the number of books on the xth shelf.
C Program

#include <stdio.h>
#include <stdlib.h>

int *total_number_of_books;

int **total_number_of_pages;

int main()
{
    int total_number_of_shelves;
    scanf("%d", &total_number_of_shelves);

    int total_number_of_queries;
    scanf("%d", &total_number_of_queries);
    total_number_of_books = (int *)malloc(sizeof(int) * total_number_of_shelves);

    total_number_of_pages = (int **)malloc(sizeof(int *) * total_number_of_shelves);

    for (int i = 0; i < total_number_of_shelves; i++)
    {
        total_number_of_books[i] = 0;
        total_number_of_pages[i] = (int *)malloc(sizeof(int));
    }

    while (total_number_of_queries--)
    {
        int type_of_query;
        scanf("%d", &type_of_query);

        if (type_of_query == 1)
        {

            int x, y;
            scanf("%d %d", &x, &y);
            *(total_number_of_books + x) += 1;
            *(total_number_of_pages + x) = realloc(*(total_number_of_pages + x), *(total_number_of_books + x) * sizeof(int));
            *(*(total_number_of_pages + x) + *(total_number_of_books + x) - 1) = y;
        }
        else if (type_of_query == 2)
        {
            int x, y;
            scanf("%d %d", &x, &y);
            printf("%d\n", *(*(total_number_of_pages + x) + y));
        }
        else
        {
            int x;
            scanf("%d", &x);
            printf("%d\n", *(total_number_of_books + x));
        }
    }

    if (total_number_of_books)
    {
        free(total_number_of_books);
    }

    for (int i = 0; i < total_number_of_shelves; i++)
    {
        if (*(total_number_of_pages + i))
        {
            free(*(total_number_of_pages + i));
        }
    }

    if (total_number_of_pages)
    {
        free(total_number_of_pages);
    }

    return 0;
}

Input:

5 5 1 0 15 1 0 20 1 2 78 2 2 0
3 0

Output:

78
2

No comments:

Post a Comment