A doubly linked list is a list in which each cell has two pointers: one to the next cell and one to the previous cell. This allows traversal in both the directions of the list which is very convenient, although it comes at the cost of some space. Define a doubly linked list type DList as follows: struct dlist { int number; // stores a number int frequency; // stores the frequency of the number struct dlist *next; // pointer to next cell struct dlist *prev; // pointer to previous cell }; typedef struct dlist DList; Write the following functions for it: /* Stores the number is the list L. If the number already is present in a cell, it increments its frequency, otherwise creates * a new cell at the beginning of the list and stores the number there (with frequency set to 1). * Returns pointer to the head of the list. */ DList insert_dlist(int number, DList L); /* Searches if the number is stored in the list L. If yes, returns a pointer to the cell in which it is stored. */ DList search_dlist(int number, DList L); /* Deletes the number from the list L. If the number occurs with frequency > 1, it just reduces the frequency otherwise * deletes the cell containing the number. If the number does not occur, it does nothing. * Returns a pointer to the head of the list. */ DList delete_dlist(int number, DList L); /* Prints the numbers stored in the list in the following way. For every number in the list, it outputs the number * following by its frequency enclosed by brackets. For example, if the list contains number 2 with frequency 3, * 7 with frequency 1, and 22 with frequency 11, then the output is (2 3) (7 1) (22 11). The function breaks * the line after outputting 10 such numbers. */ void print_dlist(DList L); Finally, write a main function that runs an infinite loop, and inside each iteration of the loop, reads a symbol and then possibly a number and does the following. Input Action ----- -------- i 10 inserts the number 10 in the list s 10 searches for the number 10 in the list. Outputs a message saying whether the number was found d 10 deletes the number 10 from the list p prints the numbers stores in the list e exits the program