Consider the following (somewhat strange) Queue definition, TwoStackQueue, that uses two Stacks to represent the data in the queue:
#ifndef TWOSTACKQUEUE_H_ #define TWOSTACKQUEUE_H_ #include "arraystack.h" #include "queue.h" template <typename T> class TwoStackQueue : public Queue<T> { private: ArrayStack<T> in; ArrayStack<T> out; public: void enqueue(T item); T dequeue(); T getFront(); int getSize(); bool isEmpty(); }; #include "twostackqueue.inl" #endif(The TwoStackQueue constructor and destructor are both empty and not shown.)
Using just the two Stacks in and out (and no other data), implement each queue function such that:
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) merge(A1, 2n/3, A2, n-2n/3, A) // merges sorted A1, A2 back into A