一、简介
栈 (Stack) 只允许在有序的线性数据集合的一端(称为栈顶 top)进行加入数据(push)和移除数据(pop)。因而按照 后进先出
一般作用于深度搜索
假设堆栈中有n个元素。
访问:O(n)//最坏情况
插入删除:O(1)//顶端插入和删除元素
利用栈的数据结构可以实现浏览器前进和后退
我们只需要使用两个栈(Stack1 和 Stack2)和就能实现这个功能。比如你按顺序查看了 1,2,3,4 这四个页面,我们依次把 1,2,3,4 这四个页面压入 Stack1 中。当你想回头看 2 这个页面的时候,你点击回退按钮,我们依次把 4,3 这两个页面从 Stack1 弹出,然后压入 Stack2 中。假如你又想回到页面 3,你点击前进按钮,我们将 3 页面从 Stack2 弹出,然后压入到 Stack1 中。示例图如下:
图片源于JavaGuide
二、使用数组实现一个栈
public class Stack {
//声明一个数组
private int[] arr;
//声明头结点
private int flage = 0;
public Stack(int size) {
arr = new int[size];
}
//元素入栈
public void add(int x) {
//判断栈是否已满
if (flage == arr.length) {
//如果满了,实现扩容
int[] brr = new int[arr.length * 2];
for (int i = 0; i < arr.length; i++) {
brr[i] = arr[i];
}
arr = brr;
}
arr[flage] = x;
flage = flage + 1;
}
//元素出栈
public Integer get() {
if(flage == 0) {
return null;
}
int re = arr[flage-1];
flage = flage -1;
return re;
}
}