棧
上大學時候 教科書 叫做堆棧,傳達的是一種後入先出的算法思想。但其實我們知道,堆和棧是兩個截然不同的東西。
堆棧其實是數據結果中的兩個概念 ,是存放數據的方式,堆:順序進出 (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數據存取需求都可以考慮使用這個數據結構來實現。