Design and implement list insertion and deletion algorithms that use arrays to store both the names and the pointers. Unused (either initially unused or deleted) storage should be maintained as a free list. That is, all unused storage should be linked together in a list. When a new item is deleted it is placed on the end of the free list and when a new item is inserted the space should be taken from the end of the free list.