-
public class StackBasedQueueOfInts {
private StackOfInts stack;
public StackBasedQueueOfInts() {
stack = new StackOfInts();
}
public void enqueue(int n) {
stack.push(n);
}
public int dequeue() {
if (isEmpty()) throw new Error("Empty queue on dequeue");
StackOfInts temp = new StackOfInts();
while (!stack.isEmpty()) temp.push(stack.pop());
int ans = temp.pop();
while (!temp.isEmpty()) stack.push(temp.pop());
return ans;
}
public boolean isEmpty() { return stack.isEmpty(); }
}
-
public class QueueBasedStackOfInts {
private QueueOfInts queue;
public QueueBasedStackOfInts() {
queue = new QueueOfInts();
}
public void push(int n) {
queue.enqueue(n);
}
public int pop() {
if (isEmpty()) throw new Error("Stack underflow");
int ans = 0; // bogus initialization
QueueOfInts temp = new QueueOfInts();
while (!isEmpty()) {
int n = queue.dequeue();
if (isEmpty()) ans = n;
else temp.enqueue(n);
}
while (!temp.isEmpty()) queue.enqueue(temp.dequeue());
return ans;
}
public boolean isEmpty() { return queue.isEmpty(); }
}
- Neither would be a real implementation: each would be abstractly
based on the other.
-
public class Square extends Rectangle {
public Square(int length) {
this.length = length;
this.width = length;
}
}