* dayThree * 栈 * 栈是限定仅在表位进行插入或删除操作的线性表。 * 表尾端称为栈顶(top); * 表头端称为栈底(botto); * 栈被称为后进先出的线性表(简称LIFO结构)。 * 和线性表类似,栈也有两种存储表示方法。 * 以下为顺序栈的实现。 * top为栈顶指针,每当插入新的栈顶元素时,指针top增1; * 删除栈顶元素时,指针top减1。 * 非空栈中的栈顶指针始终在栈顶元素的下一个位置上。
/** * 栈的实现类 */ public class Stack<E> { //栈顶指针 private int top; //栈容量 private int stackSize; private Object[] data; /** * 根据传入参数创建定长的栈 * @param length 要创建的栈的长度 */ public Stack(int length) { if (length > 0) { data = new Object[length]; top = -1; stackSize = length; } else { throw new RuntimeException("初始化大小不能小于0"); } } /** * 栈判空 * @return true为栈空,false为非空 */ public boolean isEmpty() { return top == -1; } /** * 栈判满 * @return true为栈满,false为未满 */ public boolean isFull(){ return stackSize - 1 == top; } /** * 元素进栈 * @param e 要进栈的元素 */ public void push(E e){ if (stackSize - 1 == top){ throw new RuntimeException("栈已满,无法入栈。"); }else { data[++top] = e; } } /** * 查看栈顶元素 * @return 栈顶元素 */ public E getTop(){ if (top == -1){ throw new RuntimeException("栈空。"); }else{ return (E)data[top]; } } /** * 弹出栈顶元素 * @return 栈顶元素 */ public E pop(){ if (top == -1){ throw new RuntimeException("栈空。"); }else{ return (E)data[top--]; } } }