栈的概念
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈
顶,另一端称为栈底。栈中的数据元素遵守后进先出 LIFO ( Last In First Out )的原则。
压栈:栈的插入操作叫做进栈 / 压栈 / 入栈, 入数据在栈顶 。
出栈:栈的删除操作叫做出栈。 出数据在栈顶 。
栈的使用
栈的实现
代码:
代码也是分为三个类来完成:
实现类:
import java.util.Arrays;public class Mystack {private int[] elem;private int usedSize;private static final int DEFAULT_CAPACITY =10;public Mystack() {this.elem =new int[DEFAULT_CAPACITY];}public void push(int val){if(isFull()){this.elem= Arrays.copyOf(this.elem,2*this.elem.length);}elem[usedSize]=val;usedSize++;}public boolean isFull(){if(this.usedSize==this.elem.length){return true;}return false;}public int pop(){if(isEmpty()){throw new EmptyException();}int oldVal= elem[usedSize-1];this.usedSize--;return oldVal;}public boolean isEmpty(){if(usedSize==0){return true;}return false;}public int peek(){if (isEmpty()) {throw new EmptyException();}return elem[usedSize-1];}
}
判断异常类:
public class EmptyException extends RuntimeException{public EmptyException() {}public EmptyException(String message) {super(message);}
}
测试类:
public class Test {public static void main(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.pop());System.out.println(mystack.pop());System.out.println(mystack.peek());}
}
代码结果: