栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java学习笔记<十三>(栈:数据结构简单实现)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java学习笔记<十三>(栈:数据结构简单实现)

数据结构 实现栈容器
package datastructure;

//数据结构 实现栈容器



//栈结构的数据依存数组方式存储,存储时不能确定数据类型,使用泛型定义容器类型
//自定义的容器只有一种数据类型,所以元素与栈的泛型相同


import java.util.Arrays;
import java.util.EmptyStackException;

public class Stack {

    private Object[] arr;    //存放元素的物理位置
    private int length=5;    //数组的默认长度
    private int size;        //记录数组中元素的个数
    private int index=-1;    //操作数组下标位置的指针,定位-1是因为获取元素时,可以抛出异常

    
    public Boolean empty(){
        return this.size==0;
    }

    
    public E pop(){
        //如果栈容器中没有元素,则抛出EmptyStackException异常
        //使用-1可以在++index有便利
        if (this.index==-1) {
            throw  new EmptyStackException();

        }
        this.size--;//return返回方法所需值后程序直接接触,所以不能定义在return后

        //如果栈中有元素,则返回指针-1位置的元素,因为指针在元素放入数组时向后移动一次,也就是++index
        //方法返回值类型为E,所以返回值时强转为E. 数组中元素为object类型需要强转
        //数组中元素被返回,但应该没被删除,再次添加时新元素覆盖旧元素(个人见解)

        return (E)(this.arr[index--]);


    }

    
    private void capacity(){
        //缓存数组
        if (this.size==0) {
            this.arr=new Object[this.length];
        }
        //以1.5倍速度增加数组长度
        if (this.size-this.length>=0) {
            this.length=this.length+(this.length>>1);// >>1相当于除以2
        }
        //将新的数组长度赋给新数组,新数组为原数组,就完成了原数组的扩容
        this.arr= Arrays.copyOf(this.arr,this.length);
    }


    
    public E push(E item){

        this.capacity();       //每次添加元素时,判断是否初始化或者扩容
        this.arr[++index]=item;//依据存入元素的顺序,一次从index=0出添加元素
        size++;                //返回数组中元素的个数
        return item;           //返回当前添加的元素

    }

    public static void main(String[] args) {

        Stack bb= new Stack<>();
        bb.push("a");
        bb.push("b");
        bb.push("c");
        bb.push("d");
        bb.push("e");
        bb.push("f");

        System.out.println(bb.pop());
        System.out.println(bb.pop());
        System.out.println(bb.pop());
        System.out.println(bb.pop());
        System.out.println(bb.pop());
        System.out.println(bb.pop());
        System.out.println(bb.pop());
        //System.out.println(bb.pop());  //栈顶为空 EmptyStackException异常
        System.out.println(bb.empty());


    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/820076.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号