【数据结构与算法】- 数组

news2024/11/22 8:44:10

数组

    • 1.1 数组的定义
    • 1.2 数组的创建
    • 1.3 数组在内存中的情况
    • 2.1 初始化数组
    • 2.2 插入元素
    • 2.3 删除元素
    • 2.4 读取元素
    • 2.5 遍历数组

1.1 数组的定义

数组中的是在内存中是连续存储的,内存是由一个个内存单元组成的,每一个内存单元都有自己的地址,数组中的每一个元素可以存储在这一个个内存单元中,使用索引来访问数组中的元素。

1.2 数组的创建

int[] arr = {1,2,3,4};

从上一个小节,不难得出,数组中访问元素时的时间复杂度为 O ( 1 ) O(1) O(1)

1.3 数组在内存中的情况

在这里插入图片描述

可以理解成图中所示,黄线表示空闲的存储单元,蓝线表示这个存储单元已经被其他元素所占用,1,2,3,4就是所创建的数组,可以看到是连续的。

2.1 初始化数组

 	// 当前数组的元素个数
    private int size = 0;
    // 容量
    private int capacity = 5;
    // 数组
    private int[] array = {};


    /**
     * 数组扩容与初始化数组
     */
    private void checkAndGrow() {
        if (size == 0){ // 如果元素个数为0,就初始化数组
            array = new int[capacity];
        }
        else if (size == capacity) { // 数组已满,就扩容数组
            capacity += capacity >> 1;
            int[] newArray = new int[capacity];
            System.arraycopy(array, 0, newArray, 0, size);
            array = newArray;
        }
    }

时间复杂度为: O ( n ) O(n) O(n)

2.2 插入元素

    /**
     * 向[0..size]位置添加元素
     *
     * @param index
     * @param element
     */
    public void add(int index, int element) {
        // 检查是否扩容
        checkAndGrow();
        if (index >= 0 && index < size) {
            // 当插入新元素时,其他数组中的元素往右移
            System.arraycopy(array, index, array, index + 1, size - index);
        }

        // 当等于size时插入尾节点
        array[index] = element;
        size++;
    }

    /**
     * 向最后位置[size]添加元素
     *
     * @param element
     */
    public void addLast(int element) {
        add(size, element);
    }

时间复杂度为: O ( n ) O(n) O(n)

2.3 删除元素

/**
     * 删除数组中的元素
     *
     * @param index
     * @return
     */
    public int remove(int index) {
        int removed = array[index];
        // 当为数组中的最后一个元素,就不需要移动
        if (index < size - 1) {
            System.arraycopy(array, index + 1, array, index, size - index - 1);
        }
        size--;
        return removed;
    }

时间复杂度为: O ( n ) O(n) O(n)

2.4 读取元素

    /**
     * 根据索引返回元素
     */
    public int get(int index) {
        return array[index];
    }

时间复杂度: O ( 1 ) O(1) O(1)

2.5 遍历数组

 /**
     * 基于函数式接口,可以按照要求来指定所要实现的功能
     *
     * @param consumer
     */
    public void myForEach(Consumer<Integer> consumer) {
        for (int i = 0; i < size; i++) {
            consumer.accept(array[i]);
        }
    }


    /**
     * 迭代器遍历
     *
     * @return
     */
    @Override
    public Iterator<Integer> iterator() {
        return new Iterator<Integer>() {
            int i = 0;
            // 查看还是否有下个元素
            @Override
            public boolean hasNext() {
                return i < size;
            }

            // 返回当前所指向的元素,并且指针往后移动
            @Override
            public Integer next() {
                return array[i++];
            }
        };
    }

时间复杂度: O ( n ) O(n) O(n)

在这里插入图片描述

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

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

相关文章

【匠心打造】从0打造uniapp 可视化拖拽设计 c_o 第十篇

一、click one for uniapp置顶&#xff1a; 全部免费开源 (你商业用途也没关系&#xff0c;不过可以告诉我公司名或者项目名&#xff0c;放在官网上好看点。哈哈-_-) 二、写在之前 距离上一篇更新已经大约4个月了&#xff0c;公司的事情&#xff0c;自己的一些琐事一直没时间…

蓝队分析研判工具箱V0.81,支持14种哥斯拉流量解密|溯源辅助|佛法搜索|shiro、log4j2解密|各种java反编译...

Part1 前言 大家好&#xff0c;我是ABC_123。“蓝队分析研判工具箱”就是把我平时写的蓝队小工具集合起来形成的&#xff0c;重点解决蓝队分析工作中的一些痛点问题。此0.81版本支持哥斯拉webshell全部14种加密流量的解密&#xff0c;感谢"小黑"的帮助&#xff0c;添…

管道-有名管道

一、有名管道 有名管道与匿名管道的不同&#xff1a; 有名管道提供了一个路径名&#xff0c;并以FIFO的文件形式存在于文件系统中。与匿名管道不同&#xff0c;有名管道可以被不相关的进程使用&#xff0c;只要它们可以访问该路径&#xff0c;就能够通过有名管道进行通信。 FI…

7.wifi开发【智能家居:终】,实践总结:智能开关,智能采集温湿,智能灯。项目运行步骤与运行细节,技术归纳与提炼,项目扩展

一。项目运行步骤与运行细节 1.项目运行步骤&#xff08;一定有其他的运行方式&#xff0c;我这里只提供一种我现在使用的编译方式&#xff09; &#xff08;1&#xff09;项目运行使用软件与技术&#xff1a; 1.Virtual linux 使用这个虚拟机进行程序的编译 2.Makefile与shl…

构建捡垃圾机器人的 ROS 2 项目

一、说明 本系列是关于学习如何使用 ROS2、Docker 和 Github 设计、设置和维护机器人项目。 先决条件 — ROS2 软件包的基本知识、实现发布者、订阅者、操作并连接它们。 我们之前在 ROS2 中了解了不同的部分。但是&#xff0c;在我们转向实际的基于硬件的项目之前&#xff0c;…

【C++】C++11——C++11介绍、初始化列表、声明、auto、decltype、nullptr、范围for循环

文章目录 C111.C11介绍2.初始化列表2.1&#xff5b;&#xff5d;初始化2.2 std::initializer_list 3.声明3.1auto3.2decltype3.3nullptr 4.范围for循环 C11 1.C11介绍 C11是C编程语言的一个版本&#xff0c;于2011年发布。C11引入了很多新特性&#xff0c;比如&#xff1a;类型…

多线程 - 单例模式

单例模式 ~~ 单例模式是常见的设计模式之一 什么是设计模式 你知道象棋,五子棋,围棋吗?如果,你想下好围棋,你就不得不了解一个东西,”棋谱”,设计模式好比围棋中的 “棋谱”. 在棋谱里面,大佬们,把一些常见的对局场景,都给推演出来了,照着棋谱来下棋,基本上棋力就不会差到哪…

思科:iOS和iOSXe软件存在漏洞

思科警告说,有人试图利用iOS软件和iOSXe软件中的一个安全缺陷,这些缺陷可能会让一个经过认证的远程攻击者在受影响的系统上实现远程代码执行。 中严重程度的脆弱性被追踪为 CVE-2023-20109 ,并以6.6分得分。它会影响启用Gdoi或G-Ikev2协议的软件的所有版本。 国际知名白帽黑客…

CSS鼠标指针表

(机翻)搬运自:cursor - CSS: Cascading Style Sheets | MDN (mozilla.org) 类型Keyword演示注释全局autoUA将基于当前上下文来确定要显示的光标。例如&#xff0c;相当于悬停文本时的文本。default 依赖于平台的默认光标。通常是箭头。none不会渲染光标。链接&状态contex…

最短路径专题2 Dijkstra 最短距离(堆优化版)

题目&#xff1a;样例&#xff1a; 输入 6 6 0 0 1 2 0 2 5 0 3 1 2 3 2 1 2 1 4 5 1 输出 0 2 3 1 -1 -1 思路&#xff1a; 根据题意&#xff0c;数据范围也小&#xff0c;也可以用朴素版的Dijsktra来做&#xff0c;朴素版的Dijsktra我做过了一遍了&#xff0c;可以看以一下我…

【统计学】Top-down自上而下的角度模型召回率recall,精确率precision,特异性specificity,模型评价

最近在学 logistic regression model&#xff0c;又遇见了几个之前的老面孔。 召回率recall, 精确率precision&#xff0c;特异性spcificity&#xff0c;准确率accuracy&#xff0c;True positive rate&#xff0c;false positive rate等等名词在学习之初遇到的困难在于&#x…

Vue3最佳实践 第六章 Pinia,Vuex与axios,VueUse 2(Vuex)

Vuex 状态管理 Vuex 是一种集中管理所有组件中数据的机制。它和Pinia一样都是解决使用 props 和 $emit 事件在组件之间传递数据时&#xff0c;当组件之间频繁传递&#xff0c;层级增加时管理数据就变得困难。Vue 的官方状态管理库已更改为Pinia&#xff0c;Pinia 具有与 Vue 几…

微信小程序-1

微信开发文档 https://developers.weixin.qq.com/miniprogram/dev/framework/ 报错在调试器的console里找 一、结构 Ctrl 放大字体 Ctrl - 缩小 设置 - - - 外观设置 - - - 可以修改喜欢的主题颜色 index.js index.json index.wxml 》 html <view class"box&qu…

【kubernetes】kubernetes中的StatefulSet使用

TOC 1 为什么需要StatefulSet 常规的应用通常使用Deployment&#xff0c;如果需要在所有机器上部署则使用DaemonSet&#xff0c;但是有这样一类应用&#xff0c;它们在运行时需要存储一些数据&#xff0c;并且当Pod在其它节点上重建时也希望这些数据能够在重建后的Pod上获取&…

Python爬虫案例入门教程(纯小白向)——夜读书屋小说

Python爬虫案例——夜读书屋小说 前言 如果你是python小白并且对爬虫有着浓厚的兴趣&#xff0c;但是面对网上错综复杂的实战案例看也看不懂&#xff0c;那么你可以尝试阅读我的文章&#xff0c;我也是从零基础python开始学习爬虫&#xff0c;非常清楚在过程中所遇到的困难&am…

字符编码的了解

前言&#xff1a; 在编写文件读取功能的过程中&#xff0c;我遭遇了一个棘手的乱码难题。经过细致的排查&#xff0c;发现这一问题的根源在于文件的字符编码。为了帮助大家有效地克服编码差异所带来的开发挑战&#xff0c;因此&#xff0c;我收集了字符集编码的相关知识&#x…

想要精通算法和SQL的成长之路 - 旋转链表

想要精通算法和SQL的成长之路 - 旋转链表 前言一. 旋转链表 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 旋转链表 原题链接 由于k的大小可能超过链表长度&#xff0c;因此我们需要根据链表长度取模。那么我们首先需要去计算链表的长度是多少&#xff1a; if (head …

C# GraphicsPath 类学习

先在窗体放2个picturebox&#xff0c; 然后看一下如下代码&#xff1b; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; us…

Pytorch基础:Tensor的transpose方法

相关阅读 Pytorch基础https://blog.csdn.net/weixin_45791458/category_12457644.html?spm1001.2014.3001.5482 在Pytorch中&#xff0c;transpose是Tensor的一个重要方法&#xff0c;同时它也是一个torch模块中的一个函数&#xff0c;它们的语法如下所示。 Tensor.transpo…

window安装压缩版postgresql

环境&#xff1a; window 11 专业版postgresql-16.0-1-windows-x64-binaries.zip 一、下载 1.1 从官网下载 https://www.postgresql.org/download/windows/ 1.2 从百度网盘下载 链接&#xff1a;https://pan.baidu.com/s/1fmQbgWSzX4hN07Lgdzfz0g?pwddzyy 提取码&#…