其他分享
首页 > 其他分享> > 数据结构之栈

数据结构之栈

作者:互联网

定义
栈(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