一、概念
线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。其表示为:
(a,b,c,d,……)
栈是线性表的一种,是允许在同一端进行插入和删除的特殊线性表。其中允许插入的一端为栈顶,另一端叫做栈底。其示意图如下:
栈的核心方法有:
- push() 向栈中压入一个数据
- pop()弹出栈顶数据
- peek()返回栈顶数据
二、栈的实现
(一)定义栈的数据结构
public class Stack<E> {
private Object[] data=null;
private int maxSize;
private int top=-1;
public Stack() {
this(10);
}
public Stack(int initialSize){
if (initialSize>=0){
this.maxSize=initialSize;
data=new Object[initialSize];
}else {
throw new RuntimeException("初始化栈的大小不能小于0");
}
}
}
成员变量top表示当前栈顶元素的位置,初始情况下,我们设置空栈的top=-1。top指针永远指向当前的栈顶元素。这个切记
(二)数据入栈
public boolean push(E e){
if (top + 1 == maxSize){
throw new RuntimeException("栈已满");
}else {
data[++top]=e;
return true;
}
}
(三)数据出栈
public E pop(){
if (top==-1){
throw new RuntimeException("栈为空");
}else {
return (E)data[top--];
}
}
(四)获取栈顶元素
public E peek(){
if (top==-1){
throw new RuntimeException("栈为空");
}else {
return (E)data[top];
}
}