1.概念:
一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。
压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。
出栈:栈的删除操作叫做出栈。出数据在栈顶。
2.栈的方法:
接下来就来一一模拟实现上述栈的方法↓
先把最基本的成员变量和构造方法完成
public class MyStack {public int[] elem;public int usedsize;public MyStack() {this.elem = new int[10];}
}
实现push方法
public void push(int val){if(isFull()){this.elem = Arrays.copyOf(elem , elem.length * 2);}elem[usedsize++] = val;}private boolean isFull(){return usedsize == elem.length;}
实现pop方法
先自定义创建一个空栈异常类
public class EmptyStackException extends RuntimeException {public EmptyStackException() {}public EmptyStackException(String message) {super(message);}
}
pop方法
public int pop(){if(isEmpty()){throw new EmptyStackException();}int val = elem[usedsize - 1];usedsize--;return val;}
private boolean isEmpty(){return usedsize == 0;}
实现peek方法
public int peek(){if(isEmpty()){throw new EmptyStackException();}return elem[usedsize - 1];}private boolean isEmpty(){return usedsize == 0;}
测试:
public class Test {//测试MyStackpublic static void main1(String[] args) {MyStack myStack = new MyStack();myStack.push(1);myStack.push(2);myStack.push(3);myStack.push(4);myStack.push(5);System.out.println(myStack.peek());System.out.println(myStack.pop());System.out.println(myStack.peek());}
}
结果: