Java数据结构-栈结构解读

版权声明: https://blog.csdn.net/pbrlovejava/article/details/82948497


一、什么是栈

栈(stack),是一种常见的数据结构;大部分的微处理器运用了栈的基本体系结构,当调用一个方法时,把它的返回地址和参数压入栈,当方法结束返回时,那些数据就出栈。这里涉及到的栈的特性,即先进后出的特性。

相关词解读:

  • 压栈(push):压栈即进栈,对于栈来说,元素只能从栈顶进栈。
  • 弹栈(pop):弹栈即出栈,对于栈来说,元素只能从栈顶弹栈。
  • 先进后出:这是前面两者的总结,即对于栈来说,先入栈的元素会被压到栈尾,而每次弹栈的只能是栈顶的元素,所以就是先进后出。
    在这里插入图片描述

二、用Java实现栈结构

public class Stack {
    private int size;//栈的大小
    private int pointer;//栈顶的索引
    private int[] theStack;//用数组构造栈结构

    public Stack(int size) {
        //初始化数组
        this.size = size;
        theStack = new int[size];
        //初始化索引,-1表示空栈
        pointer = -1;
    }

    //判断是否空栈
    public boolean isEmpty() {
        if (this.pointer == -1) {
            System.out.println("空栈");
            return true;
        } else {
            return false;
        }
    }

    //判断是否满栈
    public boolean isFull() {
        if (this.pointer == this.size - 1) {
            //满栈
            return true;
        } else {
            return false;
        }
    }

    //压栈
    public void push(int value) {
        if (!isFull()) {
            //不是满栈
            //索引+1并添加元素
            theStack[++pointer] = value;
        }

    }

    //弹栈
    public int pop() {
        if (!isEmpty()) {
            //不是空栈
            //弹出栈顶元素、索引-1
            return theStack[pointer--];
        }else{
            System.out.println("空栈");
            return 0;
        }

    }

    //查看栈顶元素
    public int peek(){
        return theStack[pointer];
    }

}

三、栈结构相关操作的Big O分析

由于弹栈和压栈都只能在栈顶进行,不需要其他操作,所以对与栈结构来说,弹栈和压栈以及查看栈顶元素的时间复杂度都是常数,即O(1)。

猜你喜欢

转载自blog.csdn.net/pbrlovejava/article/details/82948497
今日推荐