一.栈的定义
栈(stack)是一种特殊的线性表,是一种只允许在表的一端进行插入或删除操作的线性表。表中允许进行插入和删除操作的一端称为栈顶,最下面的那一端称为栈底。栈顶是动态的,它由一个称为栈顶指针的位置指示器指示。当栈中没有数据元素时,称之为空栈。栈的插入操作也称为进栈或入栈,栈的删除操作称为出栈或退栈。
栈的特点是先进后出
二.栈的基本操作
初始栈:创建一个空栈
入栈:在栈顶添加一个数据元素
出栈:删除栈顶数据元素
取栈顶元素:获取栈中当前栈顶的数据元素,栈中数据元素不变
求栈长度:获取栈中的数据元素个数
判断栈空:判断栈中是否有数据元素
三.栈的抽象数据类型
ADT 栈(stack)
数据元素 可以是任意类型,只要同属一个数据对象即可;
数据关系 数据元素之间呈线性关系,假设栈中有n个元素(a1, a2,a3,…,an),则对
每一个元素ai(i=1,2,…,n-1)都存在关系(ai,ai+1),并且a1无前趋,an无后继。
数据操作 将对栈的基本操作定义在接口IStack中,代码如下:
public interface IStack<E> {
E push(E item);//入栈
E pop(); //出栈
E peek(); //取栈顶元素
int size(); //求栈的长度
void clear();//清空栈
boolean isEmpty(); //判断栈是否为空
}
四.用顺序栈实现栈
1.顺序栈的存储结构:
用一片连续的存储空间来存储栈中的数据元素,这样的栈称为顺序栈(sequence stack)。
栈顶指示器top设在数组第一个元素前面的位置,top随着插入和删除而变化,当栈为空时,top=-1
2.实现顺序栈的接口
public interface IStack<E>{
E push(E e); //入栈
E pop(); //出栈
E peek();//取栈顶元素
boolean isEmpty();//判断栈是否为空
int size();//栈的尺寸
void clear();//清空栈
}
3.实现顺序栈
public class SeqStack<E> implements IStack<E>{
private int maxsize; //栈的最大容量
private int top; //栈顶指针
private Object arr[];
public SeqStack(int maxsize){
arr = new Object[maxsize];
this.maxsize = maxsize;
top=-1;
}
public E push(E e) {
if(!isFull()){
arr[++top] = e;
return e;
}