一招帮你搞懂数据结构的插入、删除

目录

一、尾部插入(添加)

1.初始化

2.一个打印数组的函数

3.尾插

4.完整版

二、任意位置插入

1.流程图

2.任意插

3.完整版

三、指定数据删除

1.流程图

2. 删除(首位查找到的元素)

四、删除所有

思想

代码

五、有序数组的插入(两种方法)

思想

1.嵌套两个函数

2.嵌套一个函数


一、尾部插入(添加)

首先,时刻了解Java运行的内存图,参见Java基础06(代码运行时的内存图)-CSDN博客

如上述所见,得到一个逻辑流程,接下来我们来实现它。

1.初始化

package 数据结构;import java.util.ArrayList;
import java.util.Arrays;import org.apache.jasper.tagplugins.jstl.core.ForEach;
//尾部的位置插入
public class Test {//全局变量(写在外面)int size=0;//记录有效数组的个数int capacity=10;//数组容量double factor=1.5;//因数1.5int[] arr=new int[capacity];}

2.一个打印数组的函数

【注:】虽然Java中存在ArrayList类可以直接调用类里面的Arrays.toString()方法达到相同的数组打印效果,但是Java内的底层存在如ArrayList类本质上也是提前写好的函数,所以此处着重复现这些函数。

打印函数:

    public String toString() {String res="[";for(int i=0;i<size;i++) {if(i==size-1) {res+=arr[i];//除了最后一个外,后面都跟着逗号}else {res+=arr[i]+",";}}res+="]";return res;}

3.尾插

尾插的第一步就是判断数组空间是否还有空闲;

而且String类型是不可变的,所以一旦满数组后,需要进行扩容,为了解决String类型不可变的问题,可以采用其他类型,详细可见Java基础05-CSDN博客

这里采用基础扩容的方式:

    if(size==capacity) {//数组满了,扩容capacity=(int) (capacity*factor);//强制将capacity*factor转换成int类型数据int[] brr=new int[capacity];for(int i=0;i<arr.length;i++) {brr[i]=arr[i];}arr=brr;}

判断不满,或者是满了进行扩容后,就可以顺利在数组尾部插入数据。

4.完整版

public void add(int element) {if(size==capacity) {//数组满了,扩容capacity=(int) (capacity*factor);//强制将capacity*factor转换成int类型数据int[] brr=new int[capacity];for(int i=0;i<arr.length;i++) {brr[i]=arr[i];}arr=brr;}//插入数据arr[size]=element;size++;}

二、任意位置插入

1.流程图

2.任意插

 任意位置插入时,不仅要考虑插入位置是否合法,还要判断是否满;判满和扩容在1.3已经给出;

判断合法性就是看插入位置是否在元素对列的包含范围内。

if(position<0||position>size) {return;}//判断数组没满if(size==capacity) {//数组满了,扩容capacity=(int) (capacity*factor);//强制将capacity*factor转换成int类型数据int[] brr=new int[capacity];for(int i=0;i<arr.length;i++) {brr[i]=arr[i];}arr=brr;}

完成上述过程后,就可以进行后移动操作(将插入位置后的数据全部后移一个位置,为插入数据留位置),防止数据产生覆盖而丢失的现象。

//有空间插入,需要将插入位置后的元素都向后移动一位,腾出空间for(int i=size-1;i>=position;i--) {arr[i+1]=arr[i];}//插入arr[position]=value;size++;//插入完成

3.完整版

//指定位置插入public void insert(int value,int position) {if(position<0||position>size) {return;}//判断数组没满if(size==capacity) {//数组满了,扩容capacity=(int) (capacity*factor);//强制将capacity*factor转换成int类型数据int[] brr=new int[capacity];for(int i=0;i<arr.length;i++) {brr[i]=arr[i];}arr=brr;}//有空间插入,需要将插入位置后的元素都向后移动一位,腾出空间for(int i=size-1;i>=position;i--) {arr[i+1]=arr[i];}//插入arr[position]=value;size++;//插入完成}

三、指定数据删除

1.流程图

删除通常用Boolean,返回删除成功或不成功。

2. 删除(首位查找到的元素)

查找就是从后向前将待删除数据覆盖的过程:

//删除第一个符合条件的数据//删除通常用Boolean,返回删除成功或不成功public boolean delFirst(int value) {//查找元素for(int j=0;j<size;j++) {if(arr[j]==value) {//删除(从目标元素后向前覆盖)for(int i=j+1;i<size;i++) {arr[i-1]=arr[i];}size--;return true;//注意return的返回}}return false;}

四、删除所有

思想

在三、的基础上:删除一项时,可以直接从前向后遍历数组去寻找这一项数据,但是这种方法只适合删除一项的情况,因为从后向前覆盖和从前向后查找很容易产生盲区,导致删除不干净的现象,为此统一-->查找时也从后向前查找。

代码

//删除所有public boolean delAll(int value) {//查找元素(从后向前删除)for(int j=size;j>0;j--) {if(arr[j]==value) {//删除(从目标元素后向前覆盖)for(int i=j+1;i<size;i++) {arr[i-1]=arr[i];}size--;}}return false;}

五、有序数组的插入(两种方法)

思想

有序函数的插入相当于是一种特殊的"任意位置插入",只是这个插入位置是要从前向后遍历得到的;特殊情况:当遍历一遍后都没有合适的位置,只能意味着这个数据的位置就该是尾部,此时有序插入进化成尾部插入。

1.嵌套两个函数

非静态函数之间可以互相引用,所以借用这种规则,可以如下:
 

//有序数组的插入public void sortInsert(int value) {for(int n=0;n<size;n++) {if(arr[n]>=value) {insert(value, n);return;//找到插入后就返回}}add(value);}

2.嵌套一个函数

//有序数组的插入public void sortInsert(int value) {  int n;  for (n = 0; n < size && arr[n] < value; n++) {  // 寻找插入位置  }  insert(value, n); // 直接在找到的位置插入  }  

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

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

相关文章

二叉树相关算法

满二叉树&#xff1a;每层都是满的 完全二叉树&#xff1a;特殊的满二叉树&#xff0c;可以有一个子节点&#xff0c;但最后一层必须是从左到右排列&#xff0c;中间不能有空隙&#xff0c;强调除了最后一层外&#xff0c;其他层都是满的 一、dfs深度搜索 例题&#xff1a;求…

Sigrity Power SI VR noise Metrics check模式如何进行电源噪声耦合分析操作指导

SSigrity Power SI VR noise Metrics check模式如何进行电源噪声耦合分析操作指导 Sigrity Power SI的VR noise Metrics check模式本质上是用来评估和观测器件的电源网络的耦合对于信号的影响,输出S参数以及列出具体的贡献值。 以下图为例

OpenGL入门004——使用EBO绘制矩形

本节将利用EBO来绘制矩形 文章目录 一些概念EBO 实战简介utilswindowFactory.hRectangleModel.hRectangleModel.cpp main.cppCMakeLists.txt最终效果 一些概念 EBO 概述&#xff1a; Element Buffer Object 用于存储顶点的索引数据&#xff0c;以便在绘制图形时可以重用顶点数…

Qt 视口和窗口

Qt 视口和窗口 1、视口和窗口的定义与原理 绘图设备的物理坐标是基本的坐标系&#xff0c;通过 QPainter 的平移、旋转等变换可以得到更容易操作的逻辑坐标。 为了实现更方便的坐标&#xff0c;QPainter 还提供了视口 (Viewport)和窗口 (Window)坐标系&#xff0c;通过Q…

hunyuan-DiT模型部署指南

一、介绍 Hunyuan-DiT是由腾讯混元推出的扩散模型&#xff0c;支持中文和英文双语输入&#xff0c;其他开源模型相比&#xff0c;Hunyuan-DiT 在中文到图像生成方面树立了新的水平。 二、部署流程 环境要求&#xff1a; 所需的最小 GPU 内存为 11GB&#xff0c; 建议使用具…

Pytorch学习--神经网络--搭建小实战(手撕CIFAR 10 model structure)和 Sequential 的使用

一、Sequential 的使用方法 在手撕代码中进一步体现 torch.nn.Sequential 二、手撕 CIFAR 10 model structure 手撕代码&#xff1a; import torch from torch import nn from torch.nn import Conv2d, MaxPool2d, Flatten, Linear from torch.utils.tensorboard import Su…

硬件测试工程师之EMC项目-电磁干扰-谐波测试标准解析思维导图

1&#xff1a;链接上一篇文章 ​​​​​​​相关链接&#xff1a;https://blog.csdn.net/weixin_49492286/article/details/135210741 2&#xff1a;重新总结思维导图并进行深入解析EMC-谐波测试项目 本人重新再次总结这个EMC谐波的标准解析思维导图&#xff0c;并且附上相…

ArcGIS 地理信息系统 任意文件读取漏洞复现

0x01 产品简介 ArcGIS是由美国Esri公司研发的地理信息系统(GIS)软件,它整合了数据库、软件工程、人工智能、网络技术、云计算等主流的IT技术,旨在为用户提供一套完整的、开放的企业级GIS解决方案,它包含了一套带有用户界面组件的Windows桌面应用。可以实现从简单到复杂的…

安全合规:沃尔玛自养号测评技术搭建要点

沃尔玛自养号测评技术的搭建是一个复杂且需综合考量多方面因素的过程&#xff0c;以下是对其技术搭建的详细解析&#xff1a; 一、硬件与网络环境搭建 硬件参数伪装&#xff1a; 利用国外服务器在云端搭建安全终端&#xff0c;全面阻断沃尔玛平台对设备底层硬件参数的检测&a…

Ps:天空替换

Ps菜单&#xff1a;编辑/天空替换 Edit/Sky Replacement Ps菜单&#xff1a;选择/天空 Select/Sky 天空替换 Sky Replacement命令能够自动分析前景与天空&#xff0c;利用 Adobe Sensei 技术也大大减轻了制作蒙版的负担&#xff0c;可以直观、智能、快速地实现天空替换。 到目…

【JavaEE初阶】网络编程TCP协议实现回显服务器以及如何处理多个客户端的响应

前言 &#x1f31f;&#x1f31f;本期讲解关于TCP/UDP协议的原理理解~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么废话不多说…

MySQL 9从入门到性能优化-加密函数

【图书推荐】《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;》-CSDN博客 《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;&#xff08;数据库技术丛书&#xff09;》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…

探索空间计算与 VR 设备的未来:4K4DGen 高分辨率全景 4D 内容生成系统

在当今科技飞速发展的时代,空间计算和 VR 设备正逐渐成为人们体验沉浸式场景的重要工具。而今天,我们要为大家介绍一款具有创新性的技术 ——4K4DGen 高分辨率全景 4D 内容生成系统,它为 VR/AR 沉浸式体验带来了全新的可能性。 一、项目概述 4K4DGen 项目的核心目标是实现 …

Unity中实现伤害飘字或者提示飘字效果(DoTween实现版本)

&#xff01;&#xff01;&#xff01;在实现以下效果之前&#xff0c;一定要往项目中导入DoTween插件。 一、搭建测试场景 1、在场景中新建一个带有Text组件的游戏物体A&#xff0c;并把这个游戏物体A中Text组件的Color属性中alpha值为0&#xff0c;让文字在场景中隐藏。 …

为什么说模拟电路的难点就在开通过程和关断过程?难在什么地方?

模拟电路中开通过程和关断过程之所以困难&#xff0c;主要有以下几个方面的原因&#xff1a; 1. 瞬态响应特性复杂 - 在开通和关断瞬间&#xff0c;电路中的电流和电压会发生快速变化&#xff0c;产生复杂的瞬态响应。这些瞬态响应可能包含过冲、下冲、振铃等现象&#xff0c;…

数据结构---二叉树(顺序结构),堆(上)

树 树的概念与结构 树是⼀种⾮线性的数据结构,它是由 n(n>=0) 个有限结点组成⼀个具有层次关系的集合。把它叫做树是因为它看起来像⼀棵倒挂的树,也就是说它是根朝上,⽽叶朝下的。 PS 有⼀个特殊的结点,称为根结点,根结点没有前驱结点。除根结点外,其余结点被分成…

CSS中常见的两列布局、三列布局、百分比和多行多列布局!

目录 一、两列布局 1、前言&#xff1a; 2. 两列布局的常见用法 两列布局的元素示例&#xff1a; 代码运行后如下&#xff1a; 二、三列布局 1.前言 2. 三列布局的常见用法 三列布局的元素示例&#xff1a; 代码运行后如下&#xff1a; 三、多行多列 1.前言 2&…

发现了NitroShare的一个bug

NitroShare 是一个跨平台的局域网开源网络文件传输应用程序&#xff0c;它利用广播发现机制在本地网络中找到其他安装了 NitroShare 的设备&#xff0c;从而实现这些设备之间的文件和文件夹发送。 NitroShare 支持 Windows、macOS 和 Linux 操作系统。 NitroShare允许我们为…

新世联科技:NG2-A-7在DAC空气捕集提取CO2的应用

一、DAC空气捕集提取CO2的介绍 直接空气碳捕获&#xff08;Direct Air Capture&#xff0c;简称DAC&#xff09;是一种直接从大气中提取二氧化碳的技术。 二、DAC空气捕集提取CO2的前景 从大气中提取的这种二氧化碳可以作为循环经济的一部分以各种不同方式使用。未来&#xf…

ABAP开发学习——OLE常用方法和属性

ABAP开发学习——OLE-CSDN博客 OLE常用方法和属性