#ifndef QUEUELIST_H_
    #define QUEUELIST_H_
 
    #include "list.h"
    #include "magicqueue.h"
 
    template <typename T>
    class QueueList : public List<T> {
      private:
        MagicQueue <T> values;
      public:
        QueueList();
        ~QueueList();        
        void insertAtHead(T item);
        void insertAtTail(T item);
        int getSize();
        bool isEmpty();
        // ...etc. all List methods are declared here
    };
 
    #include "queuelist-inl.h"
 
    #endif
 
 
 
Using the above declarations, complete an implementation for the methods getSize(),insertAtHead(T item), and insertAtTail(T item). Your answers should be written as they would appear in queueList-inl.h, paying attention to the scope and template operators. Once complete, describe the O() of each of your methods. Again, the details of MagicQueue are not important; you should assume it implements a Queue interface properly in O(1) time.
 
 
      
    wackyMergeSort(A, n):
      if (n <= 1)
        return
      A1 = new array
      A2 = new array
      copy first two-thirds (2n/3)  of A into A1
      copy last  one-third (n-2n/3) of A into A2
      wackyMergeSort(A1, 2n/3)
      wackyMergeSort(A2, n-2n/3)
      // merges sorted A1, A2 back into A
      merge(A1, 2n/3, A2, n-2n/3, A)