栈的简单应用-浏览器页面导航
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}