Stack(栈 )
逻辑定义
栈(Stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
总结:
- 栈是限定只允许在表的一端进行插入和删除操作的线性数据结构
- 允许操作的一端称为栈顶,另一端称为栈底
- 不含任何元素的栈称为空栈
- 栈的元素的操作遵循后进先出的原则
- Push(进栈)和Pop(出栈)是栈的基本操作
实现
栈作为一个抽象出来的规则受限的结构,可以用数组及链表实现
顺序栈
public class SeqStack {
private Object[] stack = null; // 数组
private int cursor; // 栈的指针
private int stackSize; // 栈的大小
private int INCREMENT = 5; // 栈的扩容大小
SeqStack() {
initSeqStack(10);
}
SeqStack(int initialCapacity) {
initSeqStack(initialCapacity);
}
void initSeqStack(int initialCapacity) {
stack = new Object[initialCapacity]; // 初始化数组
stackSize = initialCapacity; // 设置栈的大小
cursor = 0; // 设置指针初始位置
}
/**
* 清空栈
*/
void clear() {
// 遍历数组,清空元素
for (int i = 0; i < stack.length; i++) {
stack[i] = null;
}
}
/**
* 元素入栈
*
* @param o
*/
void push(Object o) {
// 判断是否已满栈
if (isFull()) {
stack = Arrays.copyOf(stack, stackSize + INCREMENT); // 满栈后自动扩容,默认长度为5
stackSize = stack.length; // 扩容后重新设置栈的大小
}