(一)栈的定义
示意图:
栈:是一种只能在一端插入或删除操作的线性表
栈的几个重要概念:
- 运行进行插入、删除操作的一端称为栈顶
- 表的另一端称为栈底
- 当栈中没有元素时,称为空栈
- 栈中插入元素称为入栈
- 栈中删除元素称为出栈
栈的主要特点:先进后出,既后进的元素先出栈。
(二)栈的代码实现
栈的实现方式有2种:静态栈--数组实现 动态栈--链表实现
1.静态栈--数组实现
从顺序栈示意图中我们可以看到栈的顺序存储结构可以使用一个数组+一个top整形变量来实现,利用数组来顺序存储栈中的所有元素,利用top整形变量来表示栈顶元素的下标位置。
规定:
- top总是指向栈顶元素,初始值为-1
- 当top == MaxSize-1时,表示栈满了,不能再进栈
- 进栈top加1,出栈top减1
顺序栈4要素:
- 栈空条件:top = -1
- 栈满条件:top == MaxSize-1
- 进栈操作:++top
- 出栈操作:top--
静态栈--数组实现代码演示
class ArrayStack<T> {
//数组保存数据
private Object[] data;
//约定top总是指向栈顶元素,初始值为-1
private int top;
/**
* 1.初始化数组大小==初始化栈大小
* @param initArraySize
*/
public ArrayStack(int initArraySize) {
this.top = -1;
data = new Object[initArraySize];
}
/**
* 2.判断栈是否为空
* @return
*/
public boolean isEmpty(){
return top == -1 ? true : false;
}
/**
* 3.入栈
* @param value
*/
public void push(T value) throws Exception {
if(top == data.length-1){
throw new Exception("栈满异常");
}