如何制作堆栈副本但保留原始文件?

时间:2013-11-07 00:35:46

标签: java

如何使用Stack类中的pushpoppeekisEmpty方法制作堆栈副本但保留原始文件?这甚至可能吗?

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();
        }


    }

1 个答案:

答案 0 :(得分:0)

你需要做的就是一直向下弹出底部并查看它,以某种方式存储每个弹出的值(进入一个动态分配的数组?)(java中的ArrayList?)

然后你必须将值推回到堆栈并复制到另一个堆栈上。

堆栈通常不会被复制为数据结构。

如果您有选择并希望使用该功能,则可以考虑使用其他数据结构,例如deque。

使用双端队列,您可以从顶部取下并复制到新的顶部,然后将其放回到底部,并浏览所有项目一次。

http://docs.oracle.com/javase/7/docs/api/java/util/Deque.html

http://www.cplusplus.com/reference/deque/deque/

相关问题