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 {
//测试MyStack
public 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());
}
}
结果:
