一、栈的定义
1、术语:
栈(stack):是一种只允许在表的一端进行插入或删除操作的线性表。
栈顶:表尾端,即表中允许进行插入和删除操作的一端称为栈顶。栈顶是动态的,它由一个称为栈顶指针的位置指示器指示。
栈底:表头端,即栈的最下面的那一端称为栈底。
空栈:没有元素的栈
进栈或入栈:堆栈的插入操作
出栈或退栈:堆栈的删除操作
2、栈的特点:
“后进先出”,因此,栈又被称为后进先出(last in first out,LIFO)表。它的实现方式主要有顺序栈、链栈两种。
3、栈的抽象数据类型:
数据元素:可以是任意类型,用泛型表示
数据关系:数据元素建是线性关系
数据操作:入栈、出栈、取栈顶元素、返回栈中元素个数、判断栈是否为空
我们定义抽象数据类型如下:
package codingTest2;
public interface IStack<E> {
E push(E item);//入栈
E pop();//出栈
E peek();//取栈顶元素
int size();//返回栈中元素个数
boolean empty();//判断栈是否为空
}
二、顺序栈
1、定义:
顺序栈是利用顺序存储结构实现的栈,即利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素。
类似于顺序表,它使用一维数组来存放顺序栈中的数据元素。
栈顶指示器top设在数组下标为最大的那一端,top随着插入或删除而变化。
当栈为空时,top=-1;其他时候,top为栈顶元素的索引号。
2、特点:
优点:相比于链栈,顺序栈在实现以及操作上均比链栈要容易许多
缺点:相比链栈,顺序栈只能在事先进行预申请,所以在存放较大数据量的数据时会存在栈满或则说时栈溢出的情况,在用顺序栈时需提前注意。
import java.lan