十天学完基础数据结构-第三天(数组(Array))

news2024/12/26 10:59:11

在这里插入图片描述

数组的基本概念

数组是一种线性数据结构,用于存储相同数据类型的元素。它具有以下基本概念:

  • 元素:数组中的每个数据项称为元素,可以是整数、浮点数、字符等。

  • 索引:每个元素在数组中都有一个唯一的位置,称为索引。索引通常从0开始递增。

  • 大小:数组的大小指的是它能够容纳的元素数量。数组的大小在创建时通常是固定的。

数组的特点和优缺点

数组具有以下特点和优缺点:

特点

  • 快速访问:通过索引,可以快速访问数组中的任何元素,时间复杂度为O(1)。

优点

  • 快速访问:已知索引时,数组提供了快速的访问速度。
  • 连续存储:数组中的元素在内存中是连续存储的,这有助于缓存性能。

缺点

  • 固定大小:数组的大小一经确定,通常无法动态扩展或缩小。
  • 插入和删除:在数组中插入或删除元素通常需要移动其他元素,导致操作复杂度为O(n)。

数组的常见操作

数组支持以下常见操作:

  1. 访问元素:通过索引访问数组元素。

  2. 插入元素:在指定位置插入新元素,需要将后续元素移动。

  3. 删除元素:删除指定位置的元素,需要将后续元素移动。

  4. 获取数组大小:获取数组中元素的数量。

下面是一个简单的C++示例,创建一个整数数组,访问元素,并执行一些常见操作:

#include <iostream>

int main() {
    int myArray[5]; // 创建一个包含5个整数的数组

    // 初始化数组元素
    for (int i = 0; i < 5; i++) {
        myArray[i] = i * 2; // 设置每个元素的值为其索引的两倍
    }

    // 访问和打印数组元素
    std::cout << "第三个元素:" << myArray[2] << std::endl;

    // 插入元素
    myArray[5] = 10; // 在第六个位置插入元素10

    // 删除元素
    myArray[2] = myArray[3]; // 删除第三个元素,将第四个元素的值复制过来

    // 获取数组大小
    int size = sizeof(myArray) / sizeof(myArray[0]);
    std::cout << "数组大小:" << size << std::endl;

    return 0;
}

运行结果:
在这里插入图片描述

练习题:

  1. 数组的元素索引是从什么数字开始的?
  2. 数组的什么特点使得在已知索引的情况下访问元素非常快?
  3. 描述一种情况,其中数组的固定大小可能成为限制因素。
  4. 如何在数组中插入一个新的元素?这个操作的时间复杂度是多少?

数组的元素索引是从什么数字开始的?

数组的元素索引从0开始。这意味着数组中的第一个元素可以通过索引0来访问,第二个元素通过索引1来访问,以此类推。

数组的什么特点使得在已知索引的情况下访问元素非常快?

数组之所以在已知索引的情况下访问元素非常快,是因为数组的元素在内存中是连续存储的。计算机可以通过简单的数学运算(如索引乘以元素大小)来计算出要访问的元素在内存中的准确位置,因此访问时间是常数时间(O(1))。

描述一种情况,其中数组的固定大小可能成为限制因素。

数组的固定大小可能成为限制因素的情况包括:

  • 动态数据:当需要存储的数据数量在程序运行时不断变化,而数组的大小是固定的。如果数组大小不足以容纳新的数据,就会导致数据丢失或需要复杂的操作来调整数组大小。

  • 内存限制:在内存受限的环境中,数组的大小可能受到限制。如果数组过大,可能会导致内存不足的问题,从而降低程序的性能。

如何在数组中插入一个新的元素?这个操作的时间复杂度是多少?

在数组中插入新元素通常涉及以下步骤:

  • 移动已有元素:为了腾出位置,需要将插入位置之后的元素都向后移动一位。

  • 插入新元素:将新元素放入插入位置。

这个操作的时间复杂度是O(n),其中n是数组的大小,因为在最坏情况下,需要移动所有后续元素。注意点是,在频繁插入和删除操作的情况下,数组可能不是最佳的数据结构选择,因为它的插入和删除操作效率较低。在这种情况下,其他数据结构如链表可能更合适。

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

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

相关文章

JavaScript系列从入门到精通系列第十四篇:JavaScript中函数的简介以及函数的声明方式以及函数的调用

文章目录 一&#xff1a;函数的简介 1&#xff1a;概念和简介 2&#xff1a;创建一个函数对象 3&#xff1a;调用函数对象 4&#xff1a;函数对象的普通功能 5&#xff1a;使用函数声明来创建一个函数对象 6&#xff1a;使用函数声明创建一个匿名函数 一&#xff1a;函…

2023最新使用微信小程序完成一键授权登录

前言&#xff1a; 使用开发工具&#xff1a;小程序。在我这一篇已经详细介绍了小程序的安装介绍http://t.csdnimg.cn/IEVc0今天我给大家带来的是微信的一键授权登录&#xff0c;保存用户信息&#xff0c;退出的功能&#xff01;&#xff01;&#xff01;希望看完了这篇博客能够…

【python海洋专题十】Cartopy画特定区域的地形等深线图

【python海洋专题十】Cartopy画特定区域的地形等深线图 海洋与大气科学 前几期可以认为关于平面的元素画法&#x1f197;了 本期关于特定区域平面画法 全球区域水深图 本期内容 画某元素特定区域的平面图&#xff1a;我有两个方法&#xff1a; 第一个&#xff1a;裁剪nc文…

嵌入式学习笔记(45) NandFlash的接口

9.1.1 Nand的型号与命名 (1)K9F2G08&#xff1a;K9F表示是三星公司的NandFlash系列。2G表示Nand的大小是2Gbit(256MB)。08表示Nand是8位的&#xff08;数据线有8根&#xff09;。 (2)Nand命名中可以看出&#xff0c;厂家、系列型号、容量大小、数据位数 9.1.2 Nand的数据位 …

机器视觉工程师,努力方向错了,白费

努力方向错了&#xff0c;白费。 在这个知识经济&#xff0c;知识付费&#xff0c;知识大V横行的时代&#xff0c;知识似乎遍地都是。但你有没有想过&#xff0c;微博里的段子是不是知识&#xff1f;微信里的爆款文章是不是知识&#xff1f;得到App里的音频是不是知识&#xf…

OpenGLES:绘制一个混色旋转的3D球体

一.概述 前面几篇博文讲解了如何使用OpenGLES实现不同的3D图形 本篇博文讲解怎样实现3D世界的代表图形&#xff1a;一个混色旋转的3D球体 二.球体解析 2.1 极限正多面体 如果有学习过我前几篇3D图形绘制的博文&#xff0c;就知道要想绘制一个3D图形&#xff0c;首先要做的…

基于Java的校园二手书交易平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

挑战自己,编程你的五子棋:Python+Pygame实践经验分享

引言 五子棋&#xff0c;古老而经典&#xff0c;是一种两人对抗的策略棋类游戏。想要体验制作游戏的乐趣吗&#xff1f;本文将详细指导你如何使用Python语言和Pygame库&#xff0c;一步步打造自己的五子棋游戏&#xff01; 1. 开始之前&#xff1a;重要准备 首先&#xff0…

使用DNS查询Web服务器IP地址

浏览器并不具备访问网络的功能&#xff0c;其最终是通过操作系统实现的&#xff0c;委托操作系统访问服务器时提供的并不是浏览器里面输入的域名而是ip地址&#xff0c;因此第一步需要将域名转换为对应的ip地址 域名&#xff1a;www.baidu.com ip地址是一串数字 tcp/ip的网络结…

项目进展(六)-继续学习32位ADC芯片ADS1285

一、数据手册学习 1.1时序图 SPI时序图&#xff0c;这是很重要的一个地方&#xff0c;一定要在代码中将SPI配置成对应的模式。 先放一堆截图在这吧&#xff0c;一些引脚的功能及特性还未看到&#xff0c;等具体了解之后再详细介绍下面几张截图的时序&#xff1a; 1.2 内…

大模型RLHF算法更新换代,DeepMind提出自训练离线强化学习框架ReST

文章链接&#xff1a; https://arxiv.org/abs/2308.08998 大模型&#xff08;LLMs&#xff09;爆火的背后&#xff0c;离不开多种不同基础算法技术的支撑&#xff0c;例如基础语言架构Transformer、自回归语言建模、提示学习和指示学习等等。这些技术造就了像GPT-3、PaLM等基座…

问答雕虫1

问题&#xff1a; 现在有如下表 假设按时间顺序&#xff0c;记录中连续出现0.2 0.3 0.5 0.7四条记录记为一次有效数据组&#xff0c;统计一段时间范围内&#xff0c;有效数据组出现的次数&#xff0c;最终计算有效数据组在整个时间范围内的记录的占比。用mysql语句或者函数如何…

uniapp uni.showToast 一闪而过的问题

问题&#xff1a;在页面跳转uni.navigateBack()等操作的前或后&#xff0c;执行uni.showToast&#xff0c;即使代码中设置2000ms的显示时间&#xff0c;也会一闪而过。 解决&#xff1a;用setTimeout延后navigateBack的执行。

css自学框架之选项卡

这一节我们学习切换选项卡&#xff0c;两种切换方式&#xff0c;一种是单击切换选项&#xff0c;一种是鼠标滑动切换&#xff0c;通过参数来控制&#xff0c;切换方法。 一、参数 属性默认值描述tabBar.myth-tab-header span鼠标触发区域tabCon.myth-tab-content主体区域cla…

C语言动态内存管理

&#x1f435;本篇文章将会对动态内存管理相关知识进行讲解 1. 为什么要存在动态内存管理❓ 目前我们掌握了两种开辟内存的方式&#xff0c;分别为&#xff1a; int a 10;//存放一个值 int arr[] { 1,2,3,4,5,6,7,8,9,10 };//存放一组数 这两种内存开辟方式都是静态的&#…

2023年山东省安全员C证证考试题库及山东省安全员C证试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年山东省安全员C证证考试题库及山东省安全员C证试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人员上岗证考试大…

人脸识别:FaceSDK 8.1 Crack

FaceSDK 使 Microsoft Visual C、C#、Objective C、Swift、Java、VB、Delphi 和 Python 开发人员能够为 Web、Windows、Linux、macOS、iOS 和 Android 构建具有人脸识别和基于人脸的 32 位和 64 位应用程序生物特征识别功能 FaceSDK 用于数百个应用程序&#xff0c;用于通过网络…

极大似然估计概念的理解——统计学习方法

目录 1.最大似然估计的概念的理解1 2.最大似然估计的概念的理解2 3.最大似然估计的概念的理解3 4.例子 1.最大似然估计的概念的理解1 最大似然估计是一种概率论在统计学上的概念&#xff0c;是参数估计的一种方法。给定观测数据来评估模型参数。也就是模型已知&#xff0c;参…

Flutter项目安装到Android手机一直显示在assembledebug

问题 Flutter项目安装到Android手机一直显示在assembledebug 原因 网络不好&#xff0c;gradle依赖下载不下来 解决方案 修改如下的文件 gradle-wrapper.properties 使用腾讯提供的gradle镜像下载 distributionUrlhttps://mirrors.cloud.tencent.com/gradle/gradle-7.5…

SpringBoot-Shiro安全权限框架

Apache Shiro是一个强大而灵活的开源安全框架&#xff0c;它干净利落地处理身份认证&#xff0c;授权&#xff0c;企业会话管理和加密。 官网&#xff1a; http://shiro.apache.org/ 源码&#xff1a; https://github.com/apache/shiro Subject&#xff1a;代表当前用户或…