如何使用Stack类中的push
,pop
,peek
和isEmpty
方法制作堆栈副本但保留原始文件?这甚至可能吗?
public static <E> Stack<E> copy(Stack<E> s){
s2 = new Stack<E>();
if(s.isEmpty())
return null;
while(!s.isEmpty())
{
E elem = s.peek();
s2.push(elem);
s.pop();
}
return s2;
}
public static void main(String[] args) {
StackCopy sCopy = new StackCopy();
Stack<Integer> s = new Stack<Integer>();
s.push(1);
s.push(2);
s.push(3);
s.push(4);
s.push(5);
s2 = sCopy.copy(s);
System.out.print("stack1 = ");
while(!s.isEmpty()){
System.out.print(s.peek() );
s.pop();
}
System.out.println("Stack 2 = ");
while(!s2.isEmpty()){
System.out.print(s2.peek() );
s2.pop();
}
}
答案 0 :(得分:0)
你需要做的就是一直向下弹出底部并查看它,以某种方式存储每个弹出的值(进入一个动态分配的数组?)(java中的ArrayList?)
然后你必须将值推回到堆栈并复制到另一个堆栈上。
堆栈通常不会被复制为数据结构。
如果您有选择并希望使用该功能,则可以考虑使用其他数据结构,例如deque。
使用双端队列,您可以从顶部取下并复制到新的顶部,然后将其放回到底部,并浏览所有项目一次。
http://docs.oracle.com/javase/7/docs/api/java/util/Deque.html