栈(1)

57 阅读2分钟

“携手创作,共同成长!开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第13天,点击查看活动详情

栈(stack)

基本介绍

是一个先入后出的有序列表,栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另—端为固定的一端,称为栈底(Bottom)。

根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素却可以在栈顶,而删除元素刚好相反,最后放入的元素可以最先删除,最先放入的元素却可以最后删除。

使用数组来模拟栈

思路分析:

1) 先通过使用数组来模拟栈

2) 定义一个变量为top表示栈顶,初始化为-1

3) 入栈操作,当有数据加入到栈是,top++;stack[top]=data;

4) 出栈操作,从栈顶取出一个数据并返回,int value=stack[top];top--,return value;

代码实现:

    private int Maxsize;  
    private int[] stack;  
    private int top=-1;  
  
    public ArrayStack(int maxsize) {  
        Maxsize = maxsize;  
        stack=new int[maxsize];  
    }  
    //判断是否为满  
    public boolean isFull(){  
        return top==Maxsize-1;  
    }  
    //判断是否为空  
    public boolean isNull(){  
        return top==-1;  
    }  
    //入栈  
    public void push(int value){  
        //判断栈是否满了,满了无法再入栈  
        if(isFull()){  
            System.out.println("栈满了");  
        }  
        top++;  
        stack[top]=value;  
    }  
    //出栈  
    public int  pop(){  
        //判断栈是否为空,为空将无法出栈  
        if(isNull()){  
            //通过抛出程序运行异常来显示错误,该运行异常不需要捕获,同时运行异常抛出的同时会结束运行  
            throw new RuntimeException("栈空,没有数据");  
        }  
        int value=stack[top];  
        top--;  
        return value;  
    }  
    //显示栈的情况,需要从栈顶开始开始查询数据  
    public void list(){  
        if(isNull()){  
            System.out.println("栈空,没有数据");  
        }  
        for (int i = top; i >= 0; i--) {  
            System.out.printf("stack[%d]=%d\n",i,stack[i]);  
        }  
    }  
}