什么是栈
栈是一种只能在表尾进行插入和删除操作的线性表;
栈顶和栈底:进行数据的插入和删除操作的一端称为栈顶,另外一端为栈底;
压栈 :插入元素的操作称为压栈或入栈;
出栈:对栈中元素的删除操作;
空栈:不含任何数据的栈为空栈;
栈的特性:先进的后出;
栈的模拟实现
import java.util.Arrays;
public class MyStack {
//栈的底层依然是一个数组;
public int elem[];
//记录栈中元素的个数;
public int UsedSize=0;
public MyStack(){
this.elem=new int [10];
}
//入栈
public int push(int key){
//如果栈满,进行扩容
if(isFull()){
elem= Arrays.copyOf(elem,2*UsedSize);
}
return elem[UsedSize++]=key;
}
//出栈
public int pop(){
if (empty()){
System.out.println("栈为空!");
return -1;
}
int ret=elem[UsedSize-1];
UsedSize--;
return ret;
}
//查看栈顶元素
public int peek(){
if (empty()){
System.out.println("栈为空!");
return -1;
}
return elem[UsedSize-1];
}
//判断当前栈是否为空
public boolean empty(){
//当前栈中元素个数为0,空栈
return UsedSize==0;
}
//栈的长度
public int getUsedSize(){
return UsedSize;
}
public boolean isFull(){
return UsedSize == elem.length;
}
}
栈的基本方法
import java.util.Stack;
public class Test2 {
public static void main(String[] args) {
//构造一个空栈;
Stack<Integer> stack=new Stack<>();
//元素入栈
stack.push(32);
stack.push(47);
stack.push(30);
stack.push(78);
stack.push(91);
stack.push(31);
//栈顶元素出栈
Integer t=stack.pop();
System.out.println(t); // 31
//查看当前栈顶元素,不出栈
Integer t1=stack.peek();
System.out.println(t1); //91
//获取当前栈中元素个数
int m=stack.size();
System.out.println(m); // 5
//判断当前栈是否为空,为空返回true
boolean b=stack.empty();
System.out.println(b); // false
}
}
栈
关于栈,java中有许多栈:
- Stack:栈,一种数据结构,具有先进的后出的特性;
- java虚拟机栈:描述的是Java方法执行的线程内存模型:每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧用于存储局部变量表、操作数栈、动态连接、方法出口等信息。
- “栈帧”:则是用于支持虚拟机进行方法调用和方法执行背后的数据结构,它也是虚拟机运行时数据区中的虚拟机栈的栈元素。
over!