浅谈顺序表基本操作

简介: 浅谈顺序表基本操作

1713246790263.png


一、顺序表的构造函数


1.1接口


public interface IList {
        // 新增元素,默认在数组最后新增
        void add(int data);
        // 在 pos 位置新增元素
        void add(int pos, int data);
        // 判定是否包含某个元素
        boolean contains(int toFind);
        // 查找某个元素对应的位置
        int indexOf(int toFind);
        // 获取 pos 位置的元素
        int get(int pos);
        // 给 pos 位置的元素设为 value
        void set(int pos, int value);
        //删除第一次出现的关键字key,更新
        void remove(int toRemove);
        // 获取顺序表长度
        int size();
        // 清空顺序表
        void clear();
        // 打印顺序表,注意:该方法并不是顺序表中的方法,为了方便看测试结果给出的
        void display();
        //顺序表判满
        boolean isFull();
        //顺序表判空
        boolean isEmpty();
}


1.2 类定义


class MyArrayList implements IList {
    private int[] elem;
    private int usedSize;
    public static final int DEFAULT_SIZE=2;
    public MyArrayList(){
        this.elem=new int[DEFAULT_SIZE];
        this.usedSize=0;
    }
    public MyArrayList(int capacity){
        this.elem=new int[capacity];
    }
}

二、实现的功能


2.1检查容量


如果当前容量不足,则扩大2倍。


private void checkCapacity(){//检查容量
        if(isFull()){
            //扩容
            elem=Arrays.copyOf(elem,elem.length*2);
        }
    }

2.2表尾插入元素


在插入前,首先检查容量,容量不足就先扩容,之后继续插入。


public void add(int data) {
        checkCapacity();
        elem[this.usedSize]=data;
        this.usedSize++;
    }


2.3判满


 public boolean isFull() {
       /* if(usedSize==elem.length){
            return true;
        }
        return false;*/
        return usedSize==elem.length;
    }


2.4指定位置增加元素


首先要检查指定位置是否合法:


 private void checkPosOnAdd(int pos) throws PosIllegality{
        if(pos<0 || pos>usedSize){
            System.out.println("插入不合法!");
            throw new PosIllegality("插入元素下标异常:>"+pos);
        }
    }


public void add(int pos, int data) {
        try{
            checkPosOnAdd(pos);//检查pos位置合法性
        }catch (PosIllegality e){
            e.printStackTrace();//捕获异常并打印插入元素下标异常
            return;
        }
        checkCapacity();
        //1.从最后一个有效的数据开始往后移动,当i小于pos就结束
        for (int i = usedSize-1; i >=pos ; i--) {
            elem[i+1]=elem[i];
        }
        //2.存放元素到pos位置
        elem[pos]=data;
        //3.顺序表长度加一
        usedSize++;
    }


2.5判空


public boolean isEmpty() {
        return usedSize==0;
    }


2.6检查数据是否在表中


    public boolean contains(int toFind) {
        if(isEmpty()){
            return false;
        }
 
        for (int i = 0; i < usedSize; i++) {
            //如果是查找引用类型,一定要用equals方法!!!
            if(elem[i]==toFind){
                return true;
            }
        }
        return false;
    }


2.7查找指定元素的下标


   public int indexOf(int toFind) {
        if(isEmpty()){
            return -1;
        }
        for (int i = 0; i < usedSize; i++) {
            //如果是查找引用类型,一定要用equals方法!!!
            if(elem[i]==toFind){
                return i;
            }
        }
        return -1;
    }


2.8获取指定位置的元素


同样需要检查指定位置是否合法:


  private void checkPosOnGetAndSet(int pos) throws PosIllegality{
        if(pos<0 || pos>=usedSize){
            System.out.println("获取元素下标不合法!");
            throw new PosIllegality("获取元素下标异常:>"+pos);
        }
    }


public int get(int pos)throws MyArrayListEmpty {
        if(isEmpty()){
            throw new MyArrayListEmpty("顺序表为空!!");
        }
        checkPosOnGetAndSet(pos);
        return elem[pos];
    }


2.9设置表中指定位置的元素


public void set(int pos, int value) {
        checkPosOnGetAndSet(pos);
        elem[pos]=value;
    }


2.10删除元素


删除元素,首先要找到要删除元素的下标,可以调用上面写过的函数。


 public void remove(int toRemove) {
        /**
         * 1.找到删除的数字下标
         * 2.挪动数据
         * 3.usedSize--
         */
        int index=indexOf(toRemove);
        if(index==-1){
            System.out.println("无此元素:>"+toRemove);
            return;
        }
        for (int i = index; i < usedSize-1; i++) {
            elem[i]=elem[i+1];
        }
        usedSize--;
    }


2.11获取元素个数


  public int size() {
        return this.usedSize;
    }


2.12清空顺序表


 public void clear() {
        this.usedSize=0;
        //如果是引用数据类型的清空,通过for循环把元素置空即可
    }


2.13显示顺序表


   public void display() {
        for (int i = 0; i < this.usedSize; i++) {
            System.out.println(elem[i]+" ");
        }
        System.out.println();
    }


相关文章
|
存储 Serverless C语言
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(三)
[笔记]Python计算机视觉编程《一》 基本的图像操作和处理(三)
227 0
|
定位技术
欧洲创业地图:获投最多的创企股权融资35亿美元|全球快讯
科技繁荣正在扩散至整个欧洲大陆,创业公司不断出现在伦敦、柏林、斯德哥尔摩等成熟创新中心之外的地方。
|
关系型数据库 MySQL Linux
linux自动启动mysql的方法
linux自动启动mysql的方法http://www.bieryun.com/3225.html 最简单的方法,直接编辑/etc/rc.local配置文件 先直接关闭现在启动的mysqld服务 msyqladmin -uroot -p -S /tmp/mysql.
1656 0
The system clock has been set back more than 24 hours
由于破解调试需要,更改了系统时间,打开ArcMap会出现"The system clock has been set back more than 24 hours"的错误,原因是由于你更改过系统时间,或者是系统时间与正常时间不正确。
1948 0
|
1天前
|
存储 JavaScript 前端开发
JavaScript基础
本节讲解JavaScript基础核心知识:涵盖值类型与引用类型区别、typeof检测类型及局限性、===与==差异及应用场景、内置函数与对象、原型链五规则、属性查找机制、instanceof原理,以及this指向和箭头函数中this的绑定时机。重点突出类型判断、原型继承与this机制,助力深入理解JS面向对象机制。(238字)
|
2天前
|
安全 数据可视化 网络安全
安全无小事|阿里云先知众测,为企业筑牢防线
专为企业打造的漏洞信息收集平台
1301 2
|
3天前
|
云安全 人工智能
2025,阿里云安全的“年度报告”
拥抱AI时代,阿里云安全为你护航~
1447 2
|
10天前
|
机器学习/深度学习 安全 API
MAI-UI 开源:通用 GUI 智能体基座登顶 SOTA!
MAI-UI是通义实验室推出的全尺寸GUI智能体基座模型,原生集成用户交互、MCP工具调用与端云协同能力。支持跨App操作、模糊语义理解与主动提问澄清,通过大规模在线强化学习实现复杂任务自动化,在出行、办公等高频场景中表现卓越,已登顶ScreenSpot-Pro、MobileWorld等多项SOTA评测。
1412 7
|
11天前
|
人工智能 Rust 运维
这个神器让你白嫖ClaudeOpus 4.5,Gemini 3!还能接Claude Code等任意平台
加我进AI讨论学习群,公众号右下角“联系方式”文末有老金的 开源知识库地址·全免费
1289 16
|
4天前
|
人工智能 前端开发 API
Google发布50页AI Agent白皮书,老金帮你提炼10个核心要点
老金分享Google最新AI Agent指南:让AI从“动嘴”到“动手”。Agent=大脑(模型)+手(工具)+协调系统,可自主完成任务。通过ReAct模式、多Agent协作与RAG等技术,实现真正自动化。入门推荐LangChain,文末附开源知识库链接。
502 118

热门文章

最新文章