数据结构之栈
作者:互联网
定义
栈(stack)又名堆栈,是一种特殊的线性表,因为其运算受限,仅能在一端进行插入(push)和删除(pop)操作。允许进行插入和删除的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,栈顶浮动。最早插入的数据位于栈低,而最新插入的数据位于栈顶。
向一个栈插入数据被称为进栈、入栈或压栈,该操作会把数据放入栈顶元素的上面,使之成为新的栈顶;从一个栈删除元素又被称为出栈或退栈,该操作会把栈顶元素删除掉,使其相邻数据成为新的栈顶。
图示
特性
LIFO-last in first out,后进先出原则存储数据。
Java数组实现
/**
* 数组实现固定大小的栈,具有push()、pop()、peek()、isEmpty()和isFull()等方法。
* @author Yoko
*/
@Data
@Slf4j
public class StackDemo {
/** 栈大小 */
private int maxSize;
/** 容纳数据的数组 */
private long[] stackArray;
/** 栈顶 */
private int top;
public StackDemo(int maxSize) {
this.maxSize = maxSize;
this.stackArray = new long[maxSize];
this.top = -1;
}
/** 是否满栈 */
public boolean isFull() {
return top == maxSize - 1;
}
/** 是否空栈 */
public boolean isEmpty() {
return top == -1;
}
/** 入栈 */
public void push(long num) {
boolean isFull = this.isFull();
if (isFull) {
log.error("栈已满,入栈失败。");
}
this.stackArray[++top] = num;
}
/** 出栈,删除数据 */
public long pop() {
boolean isEmpty = this.isEmpty();
if (isEmpty) {
log.info("栈已空,出栈失败。");
}
return this.stackArray[top--];
}
/** 出栈,删除数据 */
public long peek() {
return this.stackArray[top];
}
public static void main(String[] args) {
// 创建容量为3的栈
StackDemo stack = new StackDemo(3);
// 入栈
stack.push(5);
stack.push(28);
stack.push(3);
// 查看栈顶
log.info("入栈后查询栈顶, num = {}", stack.peek());
// 出栈
log.info("出栈, num = {}", stack.pop());
// 查看栈顶
log.info("出栈后查询栈顶, num = {}", stack.peek());
}
}
标签:出栈,top,之栈,栈顶,public,maxSize,数据结构,stack 来源: https://www.cnblogs.com/yxs-yoko/p/15743872.html