栈
上大学时候 教科书 叫做堆栈,传达的是一种后入先出的算法思想。但其实我们知道,堆和栈是两个截然不同的东西。
堆栈其实是数据结果中的两个概念 ,是存放数据的方式,堆:顺序进出 (FIFO);栈:后进先出(Last-In/First-Out)
在Java中,如何实现呢? 需要重点关心栈的特点,根据这个特点来实现:
先进后出,每次只能操作最上面的数据;
关键代码是对 头部指针控制
package com.cheri.springallmaster.datastructure;
/**
* 栈的实现:特点,先进后出,每次只能操作最上面的数据;
*
* @author Aaron Du
* @version V1.0
* @date 2020/5/10 21:08
**/
public class StackCustom {
private long maxsize;
private long[] StackArr;
private int top;
public StackCustom(int size) {
this.maxsize = size;
StackArr = new long[size];
top = -1;
}
public void push(long item) {
StackArr[++top] = item;
}
/**
* 返回并弹出最上面的那个数据
*
* @return
*/
public long pop() {
return StackArr[top--];
}
/**
* 只能返回,不会弹出数据
*/
public long peek() {
return StackArr[top];
}
public Boolean isEmpty() {
return top == -1;
}
public Boolean isFull() {
return top == maxsize - 1;
}
public static void main(String[] args) {
StackCustom stackCustom = new StackCustom(10);
stackCustom.push(23);
stackCustom.push(24);
stackCustom.push(25);
stackCustom.push(26);
stackCustom.push(27);
stackCustom.push(28);
stackCustom.push(29);
stackCustom.push(30);
stackCustom.push(1);
stackCustom.push(13);
System.out.println("peek is: "+stackCustom.peek());
//循环输出
while(!stackCustom.isEmpty()){
System.out.println("pop is: "+stackCustom.pop());
}
}
}
我们运行一下,测试截图如下, 输出结果:可以看出先插入的后出,后进的先出

总结:遇到有LIFO数据存取需求都可以考虑使用这个数据结构来实现。
本文深入讲解了Java中栈数据结构的实现方式,包括其后入先出(LIFO)的特性,以及如何通过控制头部指针来实现栈的推入(push)和弹出(pop)操作。
172万+

被折叠的 条评论
为什么被折叠?



