数据结构之顺序表的模拟实现

news2025/1/18 4:33:03

 💕"世事犹如书籍,一页页被翻过去。人要向前看,少翻历史旧账。"💕

作者:Mylvzi 

 文章主要内容:数据结构之顺序表的模拟实现 

 

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 绿字
 * Date: 2023-10-12
 * Time: 8:53
 */
import java.util.*;
/**
 * 顺序表详解
 */
public class MyArrayList {
    private int[] elem;// 存放数据的数组
    private int usedSize;// 有效数据个数

    public static final int DEFAULT_SIZE = 10;

    // 初始化顺序表
    public MyArrayList() {
        this.elem = new int[DEFAULT_SIZE];
    }

    public MyArrayList(int ininCapacity) {
        // 自定义数组的大小
        this.elem = new int[ininCapacity];
    }

    // 打印顺序表
    public void display() {
        for (int i = 0; i <this.usedSize ; i++) {
            System.out.print(this.elem[i] +" ");
        }
    }

    // 添加数据  默认是在末尾添加
    public void add(int data) {
        // 满了要扩容
        if(isFull()) {
            this.elem = Arrays.copyOf(this.elem,2*this.elem.length);
        }

        this.elem[usedSize] = data;
        this.usedSize++;
    }

    // 判断是否已满
    public boolean isFull() {
        if(this.usedSize == this.elem.length) {
            return true;
        }

        return false;
    }

    // 在 pos 位置新增元素
    public void add(int pos, int data) {
        // pos位置要合法
        if(pos<0 || pos>this.usedSize) {
            throw new RuntimeException(pos+"位置不合法");
        }

        if(isFull()) {
            this.elem = Arrays.copyOf(this.elem,2*this.elem.length);
        }

        for (int i = this.usedSize-1; i >=pos ; i--) {
            this.elem[i+1] = this.elem[i];
        }

        this.elem[pos] = data;
        this.usedSize++;
    }

    // 判定是否包含某个元素
    public boolean contains(int toFind) {
        for (int i = 0; i <this.usedSize ; i++) {
            if(this.elem[i] == toFind) {
                return true;
            }
        }
        System.out.println("数组不包含该元素");
        return false;
    }

    // 查找某个元素对应的位置
    public int indexOf(int toFind) {
        for (int i = 0; i <this.usedSize ; i++) {
            if(this.elem[i] == toFind) {
                return i;
            }
        }
        System.out.println("数组不包含该元素");
        return -1;
    }

    // 检查pos位置是否合法
    private void checkPosLegal(int pos) {
        if(pos<0 || pos>=this.usedSize) {
            throw new posOutOfBoundException(pos+" 位置不合法");
        }


    }

    // 获取 pos 位置的元素
    public int get(int pos) {

        checkPosLegal(pos);
        return this.elem[pos];

    }

    // 给 pos 位置的元素设为 value  pos位置必须含有元素
    public void set(int pos, int value) {
        checkPosLegal(pos);
        this.elem[pos] = value;
    }

    //删除第一次出现的关键字key
    public void remove(int toRemove) {
        int index = indexOf(toRemove);

        for (int i = index; i <this.usedSize-1 ; i++) {
            this.elem[i] = this.elem[i+1];
        }

        this.usedSize--;
    }
    // 获取顺序表长度
    public int size() {
        return this.usedSize;
    }

    // 清空顺序表
    public void clear() {
        // 如果是引用类型所有的引用都要置空
//        for (int i = 0; i <this.usedSize; i++) {
//            this.elem[i] = null;
//        }
        this.usedSize = 0;
    }
}
/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 绿字
 * Date: 2023-10-12
 * Time: 10:49
 */
public class posOutOfBoundException extends RuntimeException{
    public posOutOfBoundException() {
    }

    public posOutOfBoundException(String message) {
        super(message);
    }
}
/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 绿字
 * Date: 2023-10-12
 * Time: 9:02
 */
public class Test1 {
    public static void main(String[] args) {
        MyArrayList myArrayList = new MyArrayList(5);
        myArrayList.add(1);
        myArrayList.add(2);
        myArrayList.add(3);
        myArrayList.add(4);
/*        System.out.println(myArrayList.size());
        myArrayList.remove(1);
        System.out.println(myArrayList.size());*/
//        myArrayList.add(100,99);
/*        myArrayList.set(0,999);
        myArrayList.remove(999);
        myArrayList.remove(2);
        myArrayList.remove(3);
        myArrayList.remove(4);
        myArrayList.remove(5);*/

/*        System.out.println(myArrayList.get(0));
        System.out.println(myArrayList.get(-1));
        System.out.println(myArrayList.get(999));*/
//        System.out.println(myArrayList.contains(2));
//        System.out.println(myArrayList.indexOf(2));
//
/*        myArrayList.add(0,999);
        myArrayList.add(0,999);
        myArrayList.add(0,999);
        myArrayList.add(0,999);
        myArrayList.add(0,999);*/
myArrayList.clear();
        myArrayList.display();
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1104227.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【EI会议征稿通知】第四届电网系统与绿色能源国际学术会议(PGSGE 2024)

JPCS独立出版-第四届电网系统与绿色能源国际学术会议&#xff08;PGSGE 2024&#xff09; 2024 4th International Conference on Power Grid Systems and Green Energy 2024年第四届电网系统与绿色能源国际学术会议(PGSGE 2024) 将于2024年01月05-07日在中国厦门召开。本次会…

【计算机网络】第一章——概述

个人主页直达&#xff1a;小白不是程序媛 系列专栏&#xff1a;计算机网络基础 目录 前言 计算机网络概述 概念 功能 组成 分类 标准化工作 性能指标 速率 带宽 吞吐量 时延 时延带宽积 往返时延RTT 利用率 分层 为什么要分层&#xff1f; 分层的基本原则&am…

【Java实战】创建第一个Springboot项目Hello world

没有旗舰版的Idea授权&#xff0c;所以安装了社区版的idea。不知道从何时开始&#xff0c;社区版IDEA的插件不好用了&#xff0c;所以就换了个方法生成Springboot项目。 一 在线生成 选择好对应的选项后&#xff0c;点击生成就可以下载到一个完整的springboot项目了。 二 使用…

倍福tnzip,tszip,tpzip文件的打开方式

文章目录 一. tnzip的打开方式二. tszip打开方法三. tpzip打开方法 一. tnzip的打开方式 打开项目&#xff1a;选择菜单栏 FILE&#xff0c;点击 Open Solution from Archive…&#xff0c;在弹出的 对话框中选择保存好的文件&#xff0c;单击打开。选择展开此项目的路径&…

处理sass-loader安装失败

Vue项目中安装node-sass跟sass-loader 我们在开发中,经常会使用sass语法来编写css&#xff0c;在安装node-sass和sass-loader时&#xff0c;经常会出现错误&#xff08;通常是依赖冲突&#xff09;导致安装失败。因为官方发布的版本号并不是连续的&#xff0c;有些版本与版本之…

【RocketMQ系列六】RocketMQ事务消息

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精…

海洋CMS仿爱美剧影视电影视频网站模版源码/自适应手机端

海洋CMS仿爱美剧网站模板&#xff0c;自适应手机端&#xff0c;内含视频、资讯、留言模块。 下载地址&#xff1a;https://bbs.csdn.net/topics/617419787

wps/word 之 word中的两个表格 如何合并成为一个表格(已解决)

第一步&#xff1a;新建两个表格&#xff1a; 如何实现上面的两个表格合并呢&#xff1f; 分别选定每个表格&#xff0c;然后鼠标右键---》表格属性 在表格属性中的 表格---》选择 无文字环绕。 第二个表格按照同样的方法 设置 无文字环绕。 然后将中的文本行删去即可以了。选…

金融液冷数据中心,噱头还是趋势?

当前&#xff0c;全社会数字化进程加速&#xff0c;金融行业已全面进入数字化和智能化时代。与此同时&#xff0c;随着云计算、分布式架构、大数据分析、通用人工智能等技术的广泛运用&#xff0c;金融行业从数据大集中到分布式融合&#xff0c;金融企业的数据中心建设正围绕其…

什么是MIMO?

什么是MIMO&#xff1f;从SISO到MIMO - 华为 (huawei.com) MIMO&#xff08;Multiple-Input Multiple-Output&#xff09;是指在无线通信领域使用多天线发送和接收信号的技术。MIMO技术主要应用在Wi-Fi&#xff08;WiFi&#xff09;领域和移动通信领域&#xff0c;可以有效提高…

Unity之ShaderGraph如何实现光边溶解

前言 今天我们来实现一个最常见的随机溶剂效果。如下图所示&#xff1a; 光边溶解效果&#xff1a; 无光边效果 主要节点 Simple Noise&#xff1a;根据输入UV生成简单噪声或Value噪声。生成的噪声的大小由输入Scale控制。 Step&#xff1a;对于每个组件&#xff0c;如果输…

软件招标测试包含哪些测试?对软件项目起到什么作用?

在当前日益竞争激烈的软件市场中&#xff0c;一款优质的软件产品是企业获得竞争优势的关键。而软件招标测试正是评估软件质量的重要环节。   那么&#xff0c;什么是软件招标测试呢?简单来说&#xff0c;软件招标测试主要是验证软件产品的关键指标是否符合投标书要求。它通过…

多维时序 | MATLAB实现SSA-CNN-GRU-Attention多变量时间序列预测(SE注意力机制)

多维时序 | MATLAB实现SSA-CNN-GRU-Attention多变量时间序列预测&#xff08;SE注意力机制&#xff09; 目录 多维时序 | MATLAB实现SSA-CNN-GRU-Attention多变量时间序列预测&#xff08;SE注意力机制&#xff09;预测效果基本描述模型描述程序设计参考资料 预测效果 基本描述…

中国移动集采120万部,助推国产5G赶超iPhone15

近期媒体纷纷传出消息指中国移动将大规模集采&#xff0c;预计将采购国产5G手机120万台&#xff0c;加上另外两家运营商的集采数量&#xff0c;估计集采数量可能达到300万部&#xff0c;如此将有助于它在国内高端手机市场赶超苹果。 国产5G手机在8月底突然上市&#xff0c;获益…

libportaudio.so.2: cannot open shared object file: No such file or directory

ubuntu安装完pyaudio后报错 ImportError libportaudio.so.2: cannot open shared object file: No such file or directory解决方案 sudo apt-get install libportaudio2 libportaudiocpp0 portaudio19-dev

图片处理AIGC人工智能

以下是人工智能用文字生成的图片 文字&#xff1a;一个好看的亚洲美女站在桥上&#xff0c;周围是开满荷花的池塘 文字&#xff1a;一个好看的亚洲美女站在99道弯的天路上 文字&#xff1a;一个好看的亚洲美女骑在骆驼上 文字&#xff1a;一个好看的亚洲美女站在金字塔前 文字…

元宇宙虚拟展览馆,感受虚拟世界不一样的展览体验

引言&#xff1a; 随着科技的迅猛发展&#xff0c;元宇宙概念逐渐进入了大众的视野。不同于传统展览馆&#xff0c;元宇宙虚拟展览馆为人们提供了一个虚拟的展示空间&#xff0c;打破了时空的限制。 一、什么是元宇宙虚拟展览馆&#xff1f; 元宇宙虚拟展览馆是一种结合了虚拟…

[架构之路-240]:目标系统 - 纵向分层 - 应用层 - 应用层协议与业务应用程序的多样化,与大自然生物的丰富多彩,异曲同工

目录 前言&#xff1a; - 倒金子塔结构 - 大自然的组成 一、应用层在计算机系统中的位置 1.1 计算机应用程序的位置 1.1.1 业务应用程序概述 1.1.2 应用程序的分类 - 按照计算机作用范围 1.1.3 业务应用程序分类 - 按照行业分类 1.2 网络应用协议的位置 1.2.1 网络协…

你的助听器装置效果好吗?

作者&#xff1a;兰明 助听效果的好坏是一个多维的概念&#xff0c;简单的讲就是能使听障人士成功地应付生活的程度。影响助听装置效果的因素主要有三个方面&#xff1a;听障人士自身的因素、助听装置本身的因素以及专业服务的因素。其中病史超过半年的听障人士自身的因素&…

基于ssm的旅游管理系统

功能如下图所示 摘要 基于SSM框架的旅游管理系统代表了信息技术在旅行业中的崭新机遇&#xff0c;为旅行企业提供了强大的工具&#xff0c;以应对现代旅游市场的复杂挑战。这个系统的研发和实施具有广泛的研究意义&#xff0c;它深刻影响了旅游业的发展&#xff0c;具体表现如下…