栈
栈又叫做堆栈;是允许在同一端进行插入与删除操作的特殊线性表。其中执行插入删除操作的一段叫栈顶(Top),另一端为栈底(Bottom)。栈底固定,栈顶浮动。当栈内没有元素时,该栈叫做空栈。
插入过程叫做进栈(Push);
删除过程叫做出栈(Pop);
栈遵循FILO(First in Last Out),先入后出的原则。
示意图如下:
方法 | 功能描述 |
---|---|
push() | 向栈内压入一个数据,在栈的最下面 |
pop() | 弹出栈顶元素,出栈 |
peek() | 返回当前栈顶数据 |
首先定义栈的基本数据结构:
public class Stack<E>{
private Object[] data=null;
private int maxSize;
private int top=-1;
Stack(){
this(10)
}
Stack(int initalSize){
if(initalSize>=0){
this.maxSize=initalSize;
data=new Object(initalSize);
top=-1;
}else{
throw new RuntimeException("初始化大小不能小于0"+initalSize);
}
}
}
该段代码定义了一个栈类,‘定义了一个数组data,用于存储数据;定义了一个maxSize,用于规定栈的最大容量;
定义了栈顶指针为-1;同时无参构造函数中,栈的默认大小为10,当然也提供了有参的构造方法,帮助其规定其他容量的栈。
//进栈,第一个元素top=0
public boolean push(E e){
if(top==maxSize-1){
throw new RuntimeException("栈已满,无法再继续入栈")
}else{
data[++top]=e;
return true;
}
}
进栈前首先要判断是否栈已经满了,要是满了,则压不了栈;注意top指针是从-1开始的,因此top==maxSize-1的时候就是栈已经满了;入栈就是data[++top]=e,(指针不断上移)然后返回true(因为该函数返回值是布尔值)。
出栈,从栈顶移除数据
public E pop(){
if(top==-1){
throw new RuntimeException("栈为空")
}else{
return (E)data[top--];
}
}
上面方法定义了pop(),注意这里是data[top–],先把数据移除去,再top减一
仔细推向一下,一开始top=-1;压入一个,top就是0了,也就是top要比maxSize小一个。
public E peek(){
if(top==-1){
throw new RuntimeException("栈为空")
}else{
return (E)data[top];
}
}
这个和pop()差不多