Java 实现在顺序表指定位置插入一个元素

news2024/11/29 14:52:39

一、思路

1.定义一个pos变量来记录要插入的位置.
2.定义一个usedSize变量来记录元素个数.
3.定义一个data变量来记录要插入的元素值.
4.要保证pos位置合法,也就是不是负数,因为是要保证pos位置前是要有元素,因此也不能大于元素个数.
5.也需要考虑顺序表满了需要扩容的问题.
6.在开始插入之前,要将pos位置和它之后的所有元素向后位移一个位置,要注意的是是从末尾开始移动.
7.插入元素的时候直接将data赋值给pos下标.
8.插入成功后元素个数加1.


二、图解


当前 pos 指向的是 3 下标的位置,即要插入的位置是 3 下标的位置;data 是要插入的元素的值。

如果要在当前的 pos 位置插入一个元素,则需要将 4、5 这两个元素各向后移动一个位置。
需要注意的是要先移动 5,再移动 4,即先移动后面的位置,再移动前面的位置。

移动完成如下图。


接下来只需要将 data 元素的值赋值给 pos 下标即可。

插入完成的如下图。


位置不合法的情况


可以看到当前的 pos 位置不属于数组的范围,也就不可以插入到数组中。


因为要保证 pos 位置前是要有元素的,因此此时的情况也是不合法的一种。
在上述这种情况下如果插入元素,将 4、5 两个元素向后移动,在 pos 位置插入之后,pos 位置前的那一个位置(3 下标)就浪费掉了。

如果在移动元素的时候不是从末尾开始移动的比较不合理。


可以看到如果是在当前的 pos 位置插入元素,若此时不是从末尾位置移动,而是直接从 4 下标开始移动,会一次移动两个位置。效果如下图。


可以看到此时在 pos 位置插入一个元素后,会浪费掉一个空间;并且是每一次插入就会浪费掉一个空间。


三、代码

// 2.在顺序表指定位置插入一个元素
    public void add(int pos, int data) {
        // 先判断顺序表是不是满的
        if (isFull()) {
            // 满了 - 扩容
            System.out.println("顺序表满了!!!");
            this.elem = Arrays.copyOf(this.elem, 2 * this.elem.length);
        }

        // pos 位置要合法
        if (pos < 0 || pos > this.usedSize) {
            // 此时为不合法
            System.out.println("插入位置不合法!!!");
            throw new PosWrongfulException("位置不合法!!!");
        }

        // 开始插入前要将 pos 位置和他后面的元素向后移
        for (int i = this.usedSize - 1; i >= pos ; i--) {
            // 将前一个元素赋值给后一个
            this.elem[i + 1] = this.elem[i];
        }

        // 开始插入
        this.elem[pos] = data;
        // 元素个数加1
        this.usedSize++;
    }



上述图片是插入之前的顺序表元素,接下来在 1(元素2) 下标位置插入一个元素 10。


可以看到此时 10 元素就出现到了 1 下标的位置,并且顺序表的结构也没有乱。

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

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

相关文章

【电子学会】2023年03月图形化二级 -- 电子画板

电子画板 1. 准备工作 (1)删除默认的小猫角色,保留默认白色背景; (2)从角色库添加Arrow1角色作为画笔; (3)绘制五个角色:颜色分别为红、黄、绿、蓝、紫的圆形; (4)将Arrow1角色的第一个造型修改为下图所示状态,箭头尖端在角色中心位置。 2. 功能实现 (1)点…

他山之石可以攻玉:解锁9个chatGPT常用姿势

ChatGPT是一个颠覆性的人工智能&#xff0c;可以用来实现众多目标。下面是我们用中文提出的关于这些任务的指令&#xff0c;以及来自ChatGPT的中文回答示例。 调试代码 提示&#xff1a;为什么我的python代码报错&#xff1a;x [2, 3, 8 9]&#xff1f; ChatGPT回答&#x…

chatgpt赋能python:Python反转输出的利用

Python反转输出的利用 在Python编程中&#xff0c;有时候需要对一些字符串或列表进行反转输出。这种操作非常实用&#xff0c;可以用于字符串或列表翻转、倒序等场景&#xff0c;可以帮助我们提高代码的效率。在本文中&#xff0c;我们将介绍Python反转输出的方法以及实用性。…

2023/06/03 软件PM入门学习(二)

视频参考地址&#xff1a; B站闫波软件项目管理视频学习. 视频资源&#xff1a;video P3 本篇重点&#xff1a;过程、CMMI 简书日更计划同步记录&#x1f3c3;… 杂 项目管理五要素 技术、方法、团队建设、信息、沟通 战略角度 人员&#xff08;people&#xff09;问题 &am…

用Python的turtle和matplotlib画出圆满和爱心

马上就要到六一儿童节了&#xff0c;小朋友很喜欢画画&#xff0c;这里就用Pyhton来画一些简单形状。 首先是圆形&#xff0c;圆形的寓意是圆满、完美、团圆、优胜和团结。圆形在形状上是一个平面中点到定点距离相等的图形&#xff0c;象征着圆满和完美&#xff0c;寓意着无所不…

chatgpt赋能python:用什么软件编写Python文件?

用什么软件编写Python文件&#xff1f; Python 是一种流行的编程语言&#xff0c;许多人使用它来编写软件应用程序、数据分析工具以及自动化脚本。但是对于初学者来说&#xff0c;可能会感到迷茫&#xff0c;不知道应该用什么软件来编写并运行Python文件。本文将介绍几种非常流…

实战Windows Chrome 0day

遇到挑战跟挫折的时侯&#xff0c;我有一个坚定的信念&#xff0c;我可以断气&#xff0c;但绝不能放弃 漏洞复现 实战Windows Chrome 0day需要满足的条件 第一点是关闭沙箱环境 第一种方式 设置Chrome浏览器的快捷方式 在快捷方式上增加 -no-sandbox 第二种方式 命令行命令…

Vue-CLI + Vue3 + Vue-Router4 实现tabbar小案例

Vue-CLI Vue3 Vue-Router4 实现tabbar小案例 tabbar导航栏案例&#xff1a;该案例实现了基础的组件封装&#xff0c;编程式路由&#xff0c;以及插槽的使用&#xff0c;对于我们日常组件化开发有着很大的启示作用&#xff0c;主要效果是点击下方的导航栏链接&#xff0c;上方…

【owt】addon.MediaStream,erizo::MediaStream 还有addon.MediaXXX,erizo::MediaXXX

9. MediaStream 和erizo::MediaStream 类的继承关系 erizo::MediaStream source/agent/webrtc/rtcConn/erizo/src/erizo/MediaStream.h source/agent/webrtc/rtcConn/erizo/src/erizo/MediaDefinitions.h erizo::MediaSource source/agent/webrtc/rtcConn/erizo/src/erizo/…

皮卡丘RCE

1.RCE漏洞描述 RCE漏洞&#xff0c;可以让攻击者直接向后台服务器远程注入操作系统命令或者代码&#xff0c;从而控制后台系统。 远程系统命令执行 一般出现这种漏洞&#xff0c;是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口。比如我们常见的路由器、防火墙…

XSS笔记(简单了解的)

1.什么是XSS&#xff1f; XSS (Cross Site Scripting)&#xff0c;即跨站脚本攻击&#xff0c;是一种常见于 Web 应用中的计算机安全漏洞。恶意攻击者往 Web 页面里嵌入恶意的客户端脚本&#xff0c;当用户浏览此网页时&#xff0c;脚本就会在用户的浏览器上执行&#xff0c;进…

chatgpt赋能python:Python可以有多个同名函数吗?

Python 可以有多个同名函数吗&#xff1f; Python作为一门高级编程语言&#xff0c;其灵活性和易用性备受开发人员的青睐。在Python中&#xff0c;函数是编程语言的核心&#xff0c;任何有经验的Python工程师都会知道Python的函数允许使用相同的名称来进行定义。那么问题来了&…

一文搞懂编程界中最基础最常见【必知必会】的十一个算法,再也别说你只是听说过【建议收藏+关注】

文章目录 常见算法分类算法复杂度算法描述与实现交换类排序冒泡排序快速排序 插⼊类排序直接插入排序Shell排序 选择类排序简单选择排序&#xff08;⼜称直接选择排序&#xff09;堆排序 归并排序二路归并排序多路排序 线性时间非比较类排序计数排序基数排序桶排序 常见算法分类…

1. 爬虫及爬虫的步骤

1. 爬虫及爬虫的步骤 文章目录 1. 爬虫及爬虫的步骤1. 爬虫是什么&#xff1f;2. 爬虫的作用3. 爬虫步骤3.1 获取网页3.2 解析网页3.3 存储数据 4. 总结 1. 爬虫是什么&#xff1f; 爬虫就是写一段代码让计算机模仿人类自动访问网站。 2. 爬虫的作用 爬虫可以代替人们自动地…

Golang每日一练(leetDay0085) 2的幂、数字 1 的个数

目录 231. 2的幂 Power of Two &#x1f31f; 233. 数字 1 的个数 Number of Digit One &#x1f31f;&#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java…

深度学习总结——用自己的数据集微调CLIP

CLIP概述 CLIP&#xff08;Contrastive Language-Image Pretraining&#xff09;是由OpenAI开发的一种深度学习模型&#xff0c;用于将图像和自然语言文本进行联合编码。它采用了多模态学习的方法&#xff0c;使得模型能够理解图像和文本之间的语义关系。 它的核心思想是将图…

皮卡丘SQL注入汇总

1.Sql Inject(SQL注入)概述 SQL注入漏洞主要形成的原因是在数据交互中&#xff0c;前端的数据传入到后台处理时&#xff0c;没有做严格的判断&#xff0c;导致其传入的“数据”拼接到SQL语句中后&#xff0c;被当作SQL语句的一部分执行。 从而导致数据库受损&#xff08;被脱裤…

循环控制语句

文章目录 1.break——跳出循环1.1作用 2.continue——控制循环2.1作用 3.猜数字4.while语句4.1while语句的结构4.2算1-10求和&#xff1a;4.3使用while方式批量添加5个用户给这五个用户添加密码&#xff1a; 5.until语句6.拓展6.1 购物6.2shell 计算器实现加减乘除和取余6.3打印…

chatgpt赋能python:Python反转输出正整数-让计算更简单

Python反转输出正整数-让计算更简单 Python是一种高级编程语言&#xff0c;除了可以完成各种任务&#xff0c;还可以反转输出正整数。在本篇SEO文章中&#xff0c;我将介绍如何使用Python编程语言反转输出正整数&#xff0c;并且展现了这个方法是如何简化计算。 什么是Python…