栈的设计

栈的特点

栈的最重要特点就是其元素的后进先出,先进后出

栈的接口设计

栈可以直接继承之前所学的ArrayList亦或是List接口。
这过程中需要注意,最好不要直接继承,因为如果直接继承,会将接口里面的其他方法也继承下来,会导致栈的对外接口不合理,解决办法就是在类设计内部new一个private List对象来设计栈。

  1. int size(); // 元素的数量
  2. boolean isEmpty(); // 栈是否为空
  3. void push(E element); // 入栈
  4. E pop(); // 出栈
  5. E top(); // 获取栈顶元素
  6. void clear(); // 清空栈
  1. package com.wztlink1013.ds.stack;
  2. import com.wztlink1013.ds.stack.list.ArrayList;
  3. import com.wztlink1013.ds.stack.list.List;
  4. public class Stack<E> {
  5. private List<E> list = new ArrayList<>();
  6. public void clear() {
  7. list.clear();
  8. }
  9. public int size() {
  10. return list.size();
  11. }
  12. public boolean isEmpty() {
  13. return list.isEmpty();
  14. }
  15. public void push(E element) {
  16. list.add(element);
  17. }
  18. public E pop() {
  19. return list.remove(list.size() - 1);
  20. }
  21. public E top() {
  22. return list.get(list.size() - 1);
  23. }
  24. }

栈的应用

浏览器的前进和后退的功能。
假如有网页a、b、c、d,依次点击abc三个网页,然后回退至b网页,这个时候,就相当于在1栈中有ab两个网页(且b为栈顶元素),c暂时放到2栈中,此时依然可以使用回退前进功能,但是现在在b页面上在新输入d网页并进入,此时2栈被清空,d为1栈的栈顶元素,在此时的d页面内,不能使用浏览器的前进功能,只能使用后退功能。