栈
上大学时候 教科书 叫做堆栈,传达的是一种后入先出的算法思想。但其实我们知道,堆和栈是两个截然不同的东西。
堆栈其实是数据结果中的两个概念 ,是存放数据的方式,堆:顺序进出 (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数据存取需求都可以考虑使用这个数据结构来实现。