栈的简要介绍
栈,是一种常用和重要的数据结构,是一种只能在一段进行插入和删除的表。表中允许插入和删除的地方成为栈顶。栈的主要特点时“后进先出”(FILO,即First in last out),每次进栈的数据元素都放在当且栈顶元素之上,成为新的栈顶元素,每次出栈的都是当前栈顶元素。
栈的Java实现
在Java 中利用数组实现的栈,包含两个方法入栈方法add(int add)和出栈方法get(),栈类中有数组arr来存放数据,left来记录栈顶元素位置。left=0时为空栈。
public class StackTest {
private int[] arr=new int[20];
private int left=0;
public void add(int add) {
if(left>=arr.length) {
int[] newarr=new int[arr.length*2];
for(int i=0;i<arr.length;i++) {
newarr[i]=arr[i];
}
arr=newarr;
}
arr[left]=add;
left++;
}
public Integer get() {
if(left==0) {
return null;
}
if(left*4 <= arr.length) {
int length=arr.length/2;
if(length<20) {
length=20;
}
int[] newarr=new int[length];
for(int i=0;i<left;i++) {
newarr[i]=arr[i];
}
arr=newarr;
}
int result=arr[left-1];
left--;
return result;
}
}
入栈方法中,实现了对栈的扩容,当当前栈长度不够时,申请一个2倍于原来栈长的数组存放数据信息,栈长变为原来的2倍。同理,出栈时,空余过多栈内空间时,会对内存进行浪费,当栈顶left指到当前栈长的四分之一时,同理栈长减少到原来的二分之一。