我使用我创建的堆栈类中的两个堆栈创建了一个队列。我想知道是否有可能能够按顺序读出队列中的所有元素而不会从堆栈中丢失?
问题是:我可以在MyQueue.java中创建一个toString,它将列出队列的顺序。
这是我的两个文件
MyQueue.java
import java.util.NoSuchElementException;
public class MyQueue<T> {
private MyStack<T> stack1; // back of queue
private MyStack<T> stack2; // front of queue
public MyQueue() {
stack1 = new MyStack<T>();
stack2 = new MyStack<T>();
}
private void moveStack1ToStack2()throws Exception {
while (!stack1.isEmpty())
stack2.push(stack1.pop());
}
public boolean isEmpty() {
return stack1.isEmpty() && stack2.isEmpty();
}
public T peek() throws Exception {
if (isEmpty()) throw new NoSuchElementException("Queue underflow");
if (stack2.isEmpty()) moveStack1ToStack2();
T result = stack2.peek();
return result;
}
// add the item to the queue
public void enqueue(T item) throws Exception
{
stack1.push(item);
}
public T dequeue() throws Exception {
if (isEmpty()) throw new NoSuchElementException("Queue underflow");
if (stack2.isEmpty())
{
moveStack1ToStack2();
}
return (T)stack2.pop();
}
public int size()
{
return stack1.size() + stack2.size();
}
}
MyStack.java
import java.util.ArrayList;
import java.util.EmptyStackException;
public class MyStack<T> {
private ArrayList<T> al;
public MyStack() {
al = new ArrayList<T>();
}
public void push(T item) {
al.add(item);
}
public T pop() {
if (!isEmpty())
return al.remove(size()-1);
else
throw new EmptyStackException();
}
public boolean isEmpty() {
return (al.size() == 0);
}
public T peek()
{
if (!isEmpty())
return al.get(size()-1);
else
throw new EmptyStackException();
}
public int size() {
return al.size();
}
public String toString()
{
return al.toString();
}
}
答案 0 :(得分:-1)
通过添加
修复public String toString()
{
return stack2.toString();
}
到MyQueue.java