Homework Assignment Two: The second homework assignment is to create classes for singly linked lists, and a second class for a stack. You must view these entities as abstract data types. Here, the implementation should be totally transparent to the user. Specifically, We shall implement linked lists using parallel arrays, as well as by using pointers and dynamic memory. The application of linked lists should not know or care how the linked list was implemented. To study the implementation, we shall implement stacks. Again, a stack is to be viewed as an abstract data type. The user should not know or care how the actual stack was implemented, the user should only see the interface. Stacks can be implemented using arrays, or perhaps using linked lists. We shall implement stacks using both arrays and linked lists. AND, since linked lists can be implemented in at least two ways, the stack implementation using linked lists should not care how the linked lists were implemented. A stack, then can be implemented using an array directly, using a linear linked list which is implemented using dynamic memory, and using a linear linked list which is implemented using an indexed array. Which of these implementations is better? What about the complexity of the algorithms? To test our implementations, we shall exercise our stack application with a small test program that will do a large number of insertions and deletions and time each of the possible implementations to see which is more efficient.