Java——数组栈的实现

我相信大家应该都对栈有一个初步的认识,并知栈的特点:先进后出。那么栈具体是怎样实现的呢?

一、首先先带大家看一下顺序栈实现的动图:

 

二、具体用代码是怎样实现的

 

/**
Stack是一个简单的由一维数组实现的栈结构
支持入栈出栈等常见操作,但不支持动态扩容操作
为了方便简化代码,默认此Stack中只能存储int型数据
*/
public class Stack{
    private int[] data; // 容器 用于存储栈元素 data.length表示栈的最大容量
    private int top=-1;    // 栈顶标记 用于标记栈顶元素的位置 当栈为空时 top=-1 栈中有效元素的个数top+1
    private int capacity=10;    //默认最大容量为10
    /**
    创建一个默认容量为10的栈
    */
    public Stack(){
       this.data=new int[capacity];
    }
    /**
    创建一个指定容量为capacity的栈
    @param capacity 由调用者传入的指定容量
                    如果capacity<0 则容量置为0
                    如果capacity>100 则容量置为100 
    */
    public Stack(int capacity){
        if(capacity<0){
            capacity=0;
        }
        if(capacity>100){
            capacity=100;
        }
        this.data=new int[capacity];
    }
    /**
    将元素e入栈,如果栈当前已满,则无法加入
    @param e 用户指定入栈的元素
    */
    public void push(int e){
        if(top+1==this.data.length){
            System.out.println("栈已满");
        }
        this.data[++top]=e;
    }
    /**
    从栈中弹出一个元素,如果栈已经是空,则返回-1即可(没有学异常 -1表示错误)
    @return 返回当前栈顶的元素,如果栈为空则返回-1
    */
    public int pop(){
        if(isEmpty()){
            return -1;
        }
        //System.out.println("当前栈顶元素为"+)
        return this.data[top--];
    }
    /** 
    获取当前栈顶元素(不出栈),如果栈已经是空,则返回-1即可
    @return 返回当前栈顶的元素,如果栈为空则返回-1
    */
    public int peek(){
        if(isEmpty()){
            return -1;
        }
        return this.data[top];
    }
    /**
    判断当前栈是否为空
    @return true表示栈空 否则栈不为空
    */
    public boolean isEmpty(){
        return top==-1;
    }
    /**
    清空当前的栈
    */
    public void clear(){
        top=-1;
    }
    /**
    获取栈中有效元素的个数
    */
    public int size(){
        if(top==-1){
            return -1;
        }
        return top+1;
    }
    /**
    返回栈的字符串表现形式
    */
    public String toString(){
        if(isEmpty()){
            return "[]";
        }
        String str="[";
        for(int i=0;i<size();i++){
            if(i>=0&&i<size()-1){
                str+=this.data[i]+",";
            }
            
            if(i==size()-1){
                str+=this.data[i]+"]";
            }
        }
        return str;
    }
}

/*
主函数
*/
class Test02{
    public static void main(String[] args){
        Stack stack=new Stack(20);
        for(int i=1;i<=20;i++){
            stack.push(i);
            
        }
        System.out.println(stack.toString());
        System.out.println("获取栈中的有效元素:"+stack.size());
        System.out.println("返回栈顶元素:"+stack.peek());
        stack.clear();
        System.out.println(stack.isEmpty());
    } 
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值