首先我们应清楚什么是栈,栈元素具有线性关系,即前驱后继关系。只不过它是一种特殊的线性表而已,定义中说是在线性表的尾指针进行插入和删除操作,这里表尾是指栈顶,而不是栈底,它的特殊之处在于限制了这个线性表的插入和删除的位置,它始终只在栈顶进行。这也使得:栈底是固定的,最先进栈的只能在栈底。栈的插入操作,叫做进栈,也叫压栈,栈的删除操作,叫做出栈,也叫弹栈,退栈。栈的顺序存储结构简称顺序栈,它是运算受限制的顺序表。顺序栈的存储结构是:利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序表中的位置。
用顺序表实现栈代码如下:
import java.util.Arrays;
public class Stack{
private int[] array;//定义一个数组
private int top;//定义一个栈顶指针
public Stack(int defaultCapacity){
array=new int[defaultCapacity];
top=0;
}
public Stack(){
this(20);
}
public void push(int val){//插入数据
if(top==array.length){
array=Arrays.copyOf(array,array.length*2);//扩容
}
array[top++]=val;
}
public void pop(){//删除数据
if(top<=0){
System.out.println("栈为空,无法删除");
return;
}
top--;
array[top]=0;//可加可不加,把所有空的位置保持为0
}
public int top(){
if(top<=0){
System.out.println("栈为空,无法返回栈顶元素");
return -1;
}
return array[top-1];
}
public int size(){
return top;
}
public boolean isEmpty(){
return top==0;
}
}