更新时间:2021-10-08 11:12:09 来源:极悦 浏览1275次
栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
1.栈,是用来存储数据的数据结构,可以使用数组或链表来实现栈结构
2.栈顶,顾名思义栈最顶部的元素,压栈与出栈的对象
3.栈深度,栈中数据多少,如果栈结构为数组,当栈长度大于等于数组长度后,会抛出异常或对数组进行扩容,栈结构是链表就没有这个限制。
//存放数据
private Object[] data;
//数据量
private int size;
//栈顶
private int top;
//默认栈大小
private static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;
//最大容量
private int maxCapacity;
压栈
/**
* 向栈中放数据
* @param obj
* @return
*/
public boolean push(Object obj){
if (size >= maxCapacity) return false;
data[++top] = obj;
size++;
return true;
}
压栈操作比较简单,将新元素放在原栈顶的上面,栈顶指针往上移动一位。我这里当栈深度等于数组长度后是直接返回false的,当然根据实际的需求,你也可以对现有数组进行扩容,然后将原栈中元素放入新栈中即可。如:
/**
* 压栈,如果栈深度超出数组长度,将数组扩大1.5倍
* @param obj
* @return
*/
public boolean push1(Object obj){
if (size >= maxCapacity){
maxCapacity = maxCapacity * 3 / 2;
Object[] newStack = new Object[maxCapacity];
System.arraycopy(data,0,newStack,0,size);
Arrays.fill(data,null);
data = newStack;
}
data[++top] = obj;
size++;
return true;
}
出栈
/**
* 从栈中弹出数据
* @return
*/
public Object pop(){
if (size <= 0) return null;
size--;
Object old = data[top];
data[top--] = null;
return old;
}
出栈操作将栈顶元素掷为null,然后将栈顶指针往下移动一位即可,很简单。
/**
* 查看数据
*/
public Object peek(){
if (isEmpty()) return null;
return data[top];
}
这个方法更是简单到令人发指,只是查看栈顶元素,并没有将栈顶元素删除。
/**
* 清空栈数据
*/
public void clear(){
while (top > -1){
data[top--] = null;
}
size = 0;
}
栈的基本操作差不多包包含在里面了,代码实现起来就是这么简单。另外,另一种基于链表的栈我就不再这里说了,因为也是很简单的,这是栈限定对链表的操作只能是操作链表头部。
以上就是关于“Java栈数据结构详解”的介绍,大家想了解更多相关知识,可以关注一下极悦的Java堆栈教程,内容全面,通俗易懂,适合没有基础的小伙伴学习,希望对大家能有所帮助哦。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习