天天看點

java 将一個 Stack(棧)反轉

看到  http://bbs.csdn.net/topics/390843046   這裡的關于一個棧的問題:

stack的存儲方式是:屬于線性類型,則存儲方式遵循:先進後出,後進先出;

看以下代碼及結果:

    public static void main(String[] args) {

        Stack s = new Stack();

        s.add("apple");

        s.add("banana");

        s.add("org");

        s.add("cat");

        while(s.size()>0){

            System.out.println(s.pop());

        }

}

java 将一個 Stack(棧)反轉

棧反轉:

    public static void reverseStack(Stack s){

        Queue r = new LinkedList();

//r.offer() 是将指定隊列插到r中

//s.pop是 移除堆棧頂部的對象,并作為此函數的值傳回該對象。

        while(s.size()>0) r.offer(s.pop());

//s.push() 把項壓入堆棧頂部。

//r.poll() 擷取并移除此隊列的頭,如果此隊列為空,則傳回 null。

        while(r.size()>0) s.push(r.poll());

    }

實作的效果:

public static void main(String[] args) {

        //反轉一個棧

        Stack s = new Stack();

        s.add("apple");

        s.add("banana");

        s.add("org");

        s.add("cat");

//        while(s.size()>0){

//            System.out.println(s.pop());

//        }

        reverseStack(s);

        while(s.size()>0){

            System.out.println(s.pop());

        }

}

java 将一個 Stack(棧)反轉