浅谈顺序表基本操作

news2024/11/22 9:08:59

🤷‍♀️🤷‍♀️🤷‍♀️ 今天给大家带来的是数据结构——顺序表的实现(增删查改)。 

清风的CSDN博客主页

🎉欢迎👍点赞✍评论❤️收藏

😛😛😛希望我的文章能对你有所帮助,有不足的地方还请各位看官多多指教,大家一起学习交流!

动动你们发财的小手,点点关注点点赞!在此谢过啦!哈哈哈!😛😛😛

目录

 一、顺序表的构造函数

1.1接口

1.2 类定义

二、实现的功能

2.1检查容量

 2.2表尾插入元素

2.3判满

2.4指定位置增加元素

2.5判空

2.6检查数据是否在表中

2.7查找指定元素的下标

2.8获取指定位置的元素

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

2.10删除元素

2.11获取元素个数

2.12清空顺序表

2.13显示顺序表


 

源码链接-清风的Gitee

 一、顺序表的构造函数

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();
    }

🎉好啦,今天的分享就到这里!!

✨创作不易,还希望各位大佬支持一下!

👍点赞,你的认可是我创作的动力!

⭐收藏,你的青睐是我努力的方向!

✏️评论:你的意见是我进步的财富!

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

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

相关文章

刷题笔记day14-二叉树01

前序遍历 前序遍历的方式是&#xff1a;根节点、左节点、右节点。 /*** Definition for a binary tree node.* type TreeNode struct {* Val int* Left *TreeNode* Right *TreeNode* }*/ import "container/list"func preorderTraversal(root *TreeNode…

如何高效处理IT中的突发事件?

在当今快节奏的商业环境中&#xff0c;IT中的重大事件可能会意外发生&#xff0c;从而影响生产力和客户满意度。无论哪个行业&#xff0c;制定恢复计划并建立ITSM事件管理对于在危机时期确保业务连续性至关重要。 让我们来看一下某航空公司的运营&#xff0c;航空公司的运营很…

Alphago Zero的原理及实现:Mastering the game of Go without human knowledge

近年来强化学习算法广泛应用于游戏对抗上&#xff0c;通用的强化学习模型一般包含了Actor模型和Critic模型&#xff0c;其中Actor模型根据状态生成下一步动作&#xff0c;而Critic模型估计状态的价值&#xff0c;这两个模型通过相互迭代训练&#xff08;该过程称为Generalized …

YOLOv8-Seg推理详解及部署实现

目录 前言一、YOLOv8-Seg推理(Python)1. YOLOv8-Seg预测2. YOLOv8-Seg预处理3. YOLOv8-Seg后处理4. YOLOv8-Seg推理 二、YOLOv8-Seg推理(C)1. ONNX导出2. YOLOv8-Seg预处理3. YOLOv8-Seg后处理4. YOLOv8推理 三、YOLOv8-Seg部署1. 源码下载2. 环境配置2.1 配置CMakeLists.txt2.…

JavaScript 作用域链(Scope Chain)是什么?有什么作用?

结论先行&#xff1a; 当在函数内部访问一个变量的时候&#xff0c;&#xff08;JS 引擎&#xff09;程序会先在当前作用域中查找&#xff08;是否存在该变量&#xff09;&#xff0c;如果找到了就直接使用。否则就会向上层作用域逐级查找&#xff0c;直到找到全局作用域为止。…

高等数学教材重难点题型总结(一)函数与极限

强化阶段的另一个专题&#xff0c;本专题主要总结高数课本上的经典例题与课后题&#xff0c;尤其一部分加*标的题目&#xff0c;对于冲击高分的同学来说&#xff0c;必须熟练掌握。 &#xff08;蓝色代表难点&#xff0c;红色代表重点&#xff0c;紫色代表重难点&#xff09; …

Origin2023绘制双轴

在水文气象研究中&#xff0c;经常是把降水右轴并在顶部。具体操作如下&#xff1a; 1.先绘制径流曲线图 2.再添加一个图层&#xff0c;insert→new layer→Top-X-Right-Y 3.图层设置&#xff0c;添加降水序列&#xff0c;样式为柱状图 4.设置右轴的标注为600到0(保证倒立)&am…

没有接口文档如何进行接口测试(超详细~)

前言 在进行接口测试之前&#xff0c;一般开发会提供接口文档&#xff0c;给出一些接口参数和必要熟悉&#xff0c;便于我们编写接口脚本。但如果没有提供接口开发文档的请求下&#xff0c;我们该如何编写接口测试脚本呢&#xff1f;在编写测试脚本前要做哪些必要的准备呢&…

网络原理---拿捏网络层:IP协议

文章目录 IP协议4位版本4位首部长度、选项8位服务类型&#xff08;TOS&#xff09;16位总长度16位标识、3位标志、13位片偏移8位生存时间&#xff08;TTL&#xff09;8位协议16位首部校验和32位源IP地址、32位目的IP地址解决IP地址不够用的问题动态分配IP地址NAT机制&#xff0…

好消息,微信消费者投诉工具升级,可以直接回复用户、处理投诉了。。。

大家好&#xff0c;我是小悟 兄弟们&#xff0c;阅读本文之前&#xff0c;建议先阅读【连夜干出来一个自动处理【微信消费者投诉管理系统】&#xff0c;支持多商户】。 为了使工具更好用&#xff0c;也为帮助商户更好地处理消费者投诉&#xff0c;提升用户满意度&#xff0c;…

谷歌提出 AGI 完整路线图:目前 ChatGPT 只处于 AGI 的第一阶段

本心、输入输出、结果 文章目录 谷歌提出 AGI 完整路线图:目前 ChatGPT 只处于 AGI 的第一阶段前言谷歌 DeepMind 发布 AGI 分级框架发展 AGI 必须遵循6个基本原则什么是AGI图灵测试详解六大原则AGI 的五大发展过程阶段原文参考弘扬爱国精神谷歌提出 AGI 完整路线图:目前 Cha…

Fabric区块链浏览器搭建

目录 一、创建区块链浏览器相关目录二、配置docker-compose三、配置区块链浏览器四、启动区块链浏览器 书接这一回 Fabric二进制建链&#xff0c;在建好链之后&#xff0c;将为这条链部署一个区块链浏览器。 Hyperledger Fabric区块链浏览器地址&#xff1a;https://github.co…

计网----数据库(一)

计网----数据库&#xff08;一&#xff09; 一.什么是数据库 数据库是”按照数据结构来组织、存储和管理数据的仓库“。是一个长期储存在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。 二.数据库的特点 1.规范化的本地存储 2.加密 3.共享 三.数据库的好处…

[动态规划] (十四) 简单多状态 LeetCode LCR 091.粉刷房子

[动态规划] (十四) 简单多状态 LeetCode LCR 091.粉刷房子 文章目录 [动态规划] (十四) 简单多状态 LeetCode LCR 091.粉刷房子题目解析解题思路状态表示状态转移方程初始化和填表顺序返回值 代码实现总结 LCR 091. 粉刷房子 题目解析 (1) 一排房子&#xff0c;共有n个 (2) 染…

【电路笔记】-基尔霍夫电路定律

基尔霍夫电路定律 文章目录 基尔霍夫电路定律1、框架和定义2、基尔霍夫电流定律3、基尔霍夫电压定律4、基尔霍夫定律应用5、基尔霍夫定律的局限性6、总结 在本文中&#xff0c;将介绍最基本、最重要的电路定律之一。 这些法律由德国医生古斯塔夫基尔霍夫 (Gustav Kirchoff) 于 …

java数据结构--双端队列

一.概念 双端队列的意思是可以在头部和尾部添加和删除元素&#xff0c;更一般的单向链表队列比起来更加的灵活&#xff0c;下面我们用双向循环带哨兵链表和数组来分别实现 二.定义接口Dequeue /*** 双端队列*/ public interface Dequeue<E> {//队头添加元素boolean off…

MSSQL 配置ORACLE ​链接服务器

在有些场景&#xff0c;我们需要整合其他异构数据库的数据。我们可以使用代码去读取&#xff0c;经过处理后&#xff0c;再将数据保存到MSSQL数据库中。如果数据量比较大&#xff0c;但处理的逻辑并不复杂的情况下&#xff0c;这种方式就不是最好的办法。这时可以使用使用链接服…

C++笔记之表驱动法-全局静态结构体变量的应用实例ColorMAP

C笔记之表驱动法-全局静态结构体变量的应用实例ColorMAP code review! 代码 #include <ros/ros.h> #include <visualization_msgs/Marker.h>struct RGBA{RGBA(){red.r 1; green.r 0; blue.r 0;red.g 0; green.g 1; blue.g 0;red.b 0; green.b 0; blue.b…

Netty入门指南之NIO Buffer详解

作者简介&#xff1a;☕️大家好&#xff0c;我是Aomsir&#xff0c;一个爱折腾的开发者&#xff01; 个人主页&#xff1a;Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏&#xff1a;Netty应用专栏_Aomsir的博客-CSDN博客 文章目录 参考文献前言ByteBu…

终究还是翻车了,人肉运维100 次后

翻车现场 5年前的一个晚上&#xff0c;我接到数据组同事的消息&#xff0c;要求将A用户的磁盘快照共享给B用户。我对这个线上运维工作早已轻车熟路&#xff0c;登录线上服务器仅用了2分钟就完成了。 我继续忙着其他事情&#xff0c;3分钟后&#xff0c;我正要打开新的控制台页…