栈(Stack)是限定仅在表位进行插入和删除操作的线性表。允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称先进后出的线性表。
//手动实现栈
public class MyStack {
//栈的抽象为顺序表(数组)
int[]arr;
//构造方法
public MyStack() {
arr=new int[0];
}
//压栈,新建一个长度+1的数组,将新元素放在最后(栈顶)
public void push(int element) {
int[]NewArr=new int[arr.length+1];
for (int i = 0; i <arr.length; i++) {
NewArr[i]=arr[i];
}
NewArr[arr.length]=element;
arr=NewArr;
}
//出栈,取出栈顶元素,新建一个长度-1的数组,赋值后将栈顶元素弹出
public int pop() {
//如果是空栈,手动抛出异常
if(arr.length==0)throw new RuntimeException("Stack Is Empty");
//取出栈顶元素
int element=arr[arr.length-1];
int[]NewArr=new int[arr.length-1];
for (int i = 0; i < NewArr.length; i++) {
NewArr[i]=arr[i];
}
arr=NewArr;
return element;
}
//查看栈顶元素
public int peek() {
if(arr.length==0)throw new RuntimeException("Stack Is Empty");
return arr[arr.length-1];
}
//查看是否为空栈
public boolean isEmpty() {
return arr.length==0;
}
public class testStack {
public static void main(String[] args) {
MyStack ms = new MyStack();
//压栈
ms.push(9);
ms.push(8);
ms.push(7);
//弹栈
int p=ms.pop();
//输出7
System.out.println(p);
//显示栈顶元素8
System.out.println(ms.peek());
boolean res = ms.isEmpty();
//输出false
System.out.println(res);
}
}