目录
一、了解栈
栈作为一种线性的数据结构同时拥有链表的许多特征,由于栈的底部逻辑是线性表,所以我们可以将其看做一个只有一边能进一边能出的数组。
栈的特性为固定一端进行入栈操作和出栈操作,在可以入栈和出栈的一端,我们称之为栈顶,另一端不能进不能出的我们称之为栈底。
从图中我们可以清楚的看到栈的出入规律,最先进去的元素却后出栈,我们可以称之为后进先出。
二、栈的操作
栈的操作包括创建,入栈出栈,获取栈顶元素等,接下来我会用代码来挨个演示。
1. 创建一个栈
public class MyStack {
int array[];
int size;
public MyStack(){
array = new int[5];
}
}
栈中的必要元素是一个数组以及数组长度
2. 判断栈空间是否为空
//判断栈空间是否为空
public boolean isEmpty(){
return size == 0;
}
3. 判断栈空间是否为满
//判断栈空间是否为满
public void isFull(){
if(size == array.length){
array = Arrays.copyOf(this.array,2*array.length);
}
}
4. 获取栈的长度
//获取栈的长度
public int getSize(){
return this.size;
}
5. 压入一个元素至栈中
//压入一个元素
public int push(int data){
isFull();
array[size++] = data;
return data;
}
6. 获取栈顶元素
//获取栈顶元素
public int peek(){
if(isEmpty()){
System.out.println("栈为空");
}
return array[size-1];
}
7. 弹出一个栈顶元素
//弹出一个栈顶元素
public int pop(){
isEmpty();
int data = peek();
size--;
return data;
}
实现了一些基本操作后我们来使用代码验证一下
public static void main(String[] args) {
MyStack stack = new MyStack();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
System.out.println(stack.getSize());
System.out.println("===========");
System.out.println(stack.peek());
System.out.println(stack.pop());
System.out.println(stack.peek());
}
三、栈、虚拟栈、栈帧的区别
栈是一种线性数据结构,虚拟栈是内存分配时需要在内存开辟的空间,栈帧则是内存空间开辟后的单块小内存空间。