數據結構與算法(五)棧(二) -鏈表棧實現-模擬瀏覽器前進後退功能

public class Stack {
    @Test
    public void test() {
//        LinkedStack linkedStack = new LinkedStack();
//        linkedStack.push("a");
//        linkedStack.push("b");
//        linkedStack.push("c");
//        linkedStack.show();
//        System.out.println("==============" + linkedStack.pop());
//        linkedStack.show();

        Browser browser = new Browser();
        browser.open("a");
        browser.open("b");
        browser.open("c");
        browser.forward();
        browser.backward();
        browser.backward();
        browser.forward();
        browser.open("d");
    }

    class Node {
        String value;
        Node next;

        Node(String value) {
            this.value = value;
        }
    }

    class LinkedStack {
        Node head;

        public void push(String value) {
            Node temp = new Node(value);
            if (head == null) {
                head = temp;
                return;
            }
            Node current = head;
            temp.next = current;
            head = temp;
        }

        public String pop() {
            if (head == null) {
                return null;
            }
            String value = head.value;
            head = head.next;
            return value;
        }

        public void clear() {
            head = null;
        }

        public void show() {
            Node current = head;
            while (current != null) {
                System.out.println("===============[" + current.value + "]");
                current = current.next;
            }
        }
    }

    class Browser {
        private LinkedStack stack1 = new LinkedStack();
        private LinkedStack stack2 = new LinkedStack();

        public void forward() {
            String value = stack2.pop();
            if (value == null) return;
            stack1.push(value);
            System.out.println("forward1============================");
            stack1.show();
            System.out.println("forward2============================");
            stack2.show();
        }

        public void backward() {
            String value = stack1.pop();
            if (value == null) return;
            stack2.push(value);
            System.out.println("backward1=============================");
            stack1.show();
            System.out.println("backward2=============================");
            stack2.show();
        }

        public void open(String target) {
            stack1.push(target);
            stack2.clear();
            System.out.println("open1===================================");
            stack1.show();
            System.out.println("open2===================================");
            stack2.show();

        }
    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章