版权声明: https://blog.csdn.net/pbrlovejava/article/details/82948497
一、什么是栈
栈(stack
),是一种常见的数据结构;大部分的微处理器运用了栈的基本体系结构,当调用一个方法时,把它的返回地址和参数压入栈,当方法结束返回时,那些数据就出栈。这里涉及到的栈的特性,即先进后出
的特性。
相关词解读:
压栈(push)
:压栈即进栈,对于栈来说,元素只能从栈顶进栈。弹栈(pop)
:弹栈即出栈,对于栈来说,元素只能从栈顶弹栈。先进后出
:这是前面两者的总结,即对于栈来说,先入栈的元素会被压到栈尾,而每次弹栈的只能是栈顶的元素,所以就是先进后出。
二、用Java实现栈结构
public class Stack {
private int size;//栈的大小
private int pointer;//栈顶的索引
private int[] theStack;//用数组构造栈结构
public Stack(int size) {
//初始化数组
this.size = size;
theStack = new int[size];
//初始化索引,-1表示空栈
pointer = -1;
}
//判断是否空栈
public boolean isEmpty() {
if (this.pointer == -1) {
System.out.println("空栈");
return true;
} else {
return false;
}
}
//判断是否满栈
public boolean isFull() {
if (this.pointer == this.size - 1) {
//满栈
return true;
} else {
return false;
}
}
//压栈
public void push(int value) {
if (!isFull()) {
//不是满栈
//索引+1并添加元素
theStack[++pointer] = value;
}
}
//弹栈
public int pop() {
if (!isEmpty()) {
//不是空栈
//弹出栈顶元素、索引-1
return theStack[pointer--];
}else{
System.out.println("空栈");
return 0;
}
}
//查看栈顶元素
public int peek(){
return theStack[pointer];
}
}
三、栈结构相关操作的Big O分析
由于弹栈和压栈都只能在栈顶进行,不需要其他操作,所以对与栈结构来说,弹栈和压栈以及查看栈顶元素的时间复杂度都是常数,即O(1)。