栈的特点是:先进后出
一、我们为什么要将数组封装起来?
同学们的疑惑点:为什么要用数组来进行先进先出?
我们知道数组有一个特点就是能够通过下标的形式来进行获取和设置数据。但是一般情况之下我们是不能够得到数组的下标的,所以在这个地方我们一般需要借助相应的游标。并不是直接去操作数组。
二、实现栈
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;
}
}
疑惑点:为什么这么做等于删除
在java数组当中是没有真正的删除的,只有将某块内存地址设置为无效。比如下边这个灰色的地方我们任务是没有数据的但是其实不是而是数据被设置为了无效。