栈的简单应用-浏览器页面导航

栈的简单应用-浏览器页面导航


  1/**
  2 * 使用栈实现浏览器的基本前进、后退操作
  3 *
  4 * @author wangy
  5 * @version 1.0
  6 * @date 2021/6/24 / 16:57
  7 */
  8public class SimpleBrowser {
  9    private final Stack x = new Stack();
 10    private final Stack y = new Stack();
 11
 12
 13    String visit(String link) {
 14        x.push(link);
 15        y.clear();
 16        return link;
 17    }
 18
 19    String back() {
 20        if (x.size() == 1) {
 21            System.out.print("当前已在最后页面了!");
 22            return null;
 23        }
 24        y.push(x.pop());
 25        String cur = x.pop();
 26        x.push(cur);
 27        return cur;
 28    }
 29
 30    String forward() {
 31        String cur = y.pop();
 32        if (cur == null) {
 33            System.out.print("当前已在最前页面了!");
 34            return null;
 35        }
 36        x.push(cur);
 37        return cur;
 38    }
 39
 40    public static void main(String[] args) {
 41        SimpleBrowser browser = new SimpleBrowser();
 42        System.out.println("visit: " + browser.visit("www.apple.com"));
 43        System.out.println("visit: " + browser.visit("www.bing.com"));
 44        System.out.println("visit: " + browser.visit("www.google.com"));
 45        System.out.println("back: " + browser.back());
 46        System.out.println("back: " + browser.back());
 47        System.out.println("back: " + browser.back());
 48        System.out.println("back: " + browser.back());
 49        System.out.println("back: " + browser.back());
 50        System.out.println("forward: " + browser.forward());
 51        System.out.println("visit: " + browser.visit("www.oracle.com"));
 52        System.out.println("back: " + browser.back());
 53        System.out.println("forward: " + browser.forward());
 54        System.out.println("forward: " + browser.forward());
 55        System.out.println("forward: " + browser.forward());
 56        System.out.println("back: " + browser.back());
 57    }
 58
 59    /********************* 栈的基本实现 ********************/
 60    class Stack {
 61        private String[] data;
 62
 63        private int size;
 64
 65        private int cap;
 66
 67        public Stack() {
 68            this.data = new String[10];
 69            this.cap = 10;
 70            this.size = 0;
 71        }
 72
 73        int size() {
 74            return size;
 75        }
 76
 77        void push(String str) {
 78            if (size == cap) {
 79                String[] newData = new String[cap * 2];
 80                for (int i = 0; i < size; i++) {
 81                    newData[i] = data[i];
 82                }
 83                data = newData;
 84            }
 85            data[size++] = str;
 86        }
 87
 88        String pop() {
 89            if (size == 0) return null;
 90            return data[--size];
 91        }
 92
 93        // 清空栈
 94        void clear() {
 95            // 让GC处理出栈的元素
 96            while (size > 0)
 97                pop();
 98//            size = 0 ;
 99
100        }
101    }
102}