数据结构-数组

1.容器

容器用于容纳元素集合,并对元素集合进行管理和维护.
传统意义上的管理和维护就是:增,删,改,查.
我们分析每种类型容器时,主要分析其增,删,改,查动作实现,及复杂度.

2.数组

2.1.结构
2.1.1.图解
数组是容器类型.
数组的特点是逻辑上相邻的元素在线性空间也相邻.
在这里插入图片描述
上述是一个容量为11的数组,它存储了8个有效元素.这些元素符合逻辑上相邻,线性空间中也相邻.
数组的上述特点使得其可以支持基于索引的元素访问.说的通俗一点就是,我们希望访问上述数组索引为4的元素,不必从首个元素逐个迭代,直接采取*(pAddr+4)的方式访问.

2.2.动作
2.2.1.增
数组中插入新元素,首先需要明确新元素插入的位置.
原则上新元素可插入到[数组起始位置,数组尾后位置]这个范围内的任何位置,但程序为了自身逻辑需要,可能需要按自己的方式确立插入位置.
比如我们在上述图示数组的索引位置插入新元素,其过程如下:
(1). 插入位置及之后各个元素依次后移一个位置
在这里插入图片描述
这样便将索引的位置腾出来了.
(2). 将新元素放入到腾出的位置
在这里插入图片描述
上述标红的代表了新元素.

2.2.2.删
数组中删除元素,首先需要明确待删除元素的位置.
原则上可删除[数组起始位置,数组尾后位置)这个范围内的任何元素,但程序为了自身逻辑需要,可能需要按自己的方式确认删除元素位置.
比如我们再将2.2.1图示数组的索引位置的元素移除,其过程如下:
(1). 待删除位置之后的各个元素分别依次前移一个位置
在这里插入图片描述
2.2.3.查
数组中查询符合特定条件的元素需要从首元素依次访问每个元素,判定其是否符合条件.

2.2.4.改
数组中修改元素,首先需要明确待修改元素的位置.
原则上可修改[数组起始位置,数组尾后位置)这个范围内的任何元素,但程序为了自身逻辑需要,可能需要按自己的方式确认修改元素位置.
比如我们修改2.2.2图示数组的索引位置的元素:*(pAddr+2) = 新的元素值;,这样即可完成修改操作.

2.3.时间复杂度
评价容器的依据一个是其占据的线性空间,一个是操作执行的时间复杂度.
对数组其各个操作时间复杂度为:
(1). 索引访问:Θ(1)
(2). 增:Θ(n)
(3). 删:Θ(n)
(4). 查:Θ(n)
(5). 改:Θ(1)(在修改位置已经明确下)

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

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

相关文章

Matlab 移动最小二乘求解仿射变换

文章目录 一、简介二、实现代码三、实现效果参考文献一、简介 在现实生活中,我们常常应用一些刚性的变换来实现物体的旋转平移,对于非刚性的变换我们都没有在意,其实这种变换也是无处不在的,如我们经常看的动画就可以通过一些非刚性的变换达到一些非常夸张的效果。这里,我…

iMazing 3中文版双平台版本同步,iOS 设备在 Windows 上也能自动备份了

自从WWDC 2019 宣布 iTunes 退役后,也许很多小伙伴都对「上位者」iMazing 有所耳闻。 这款设计更加人性化、功能细致强大的 iOS 备份管理工具。 iMazing 支持在 Windows 及 Mac 上运行,而这个月 Windows 版本更新至 2.17. 之后,iMazing 的双…

Kubernetes基础(十一)-CNI网络插件用法和对比

1 CNI概述 1.1 什么是CNI? Kubernetes 本身并没有实现自己的容器网络,而是借助 CNI 标准,通过插件化的方式来集成各种网络插件,实现集群内部网络相互通信。 CNI(Container Network Interface,容器网络的…

如何构建起自己的伦敦银交易系统?

投资者在市场这个江湖中行走,就需要有一技防身,不然很容易会被市场的风险所淹没,这个“一技”指的就是伦敦银交易系统。如果投资者要构建起自己的伦敦银交易系统,应该从哪几个方面着手呢?下面我们就来讨论一下。 分析方…

103 C++ 内存高级话题 重载全局new,delete,定位new以及重载等

一 重载全局 operator new 和 operator delete 操作符 前面是看到了 我们在某一个类中 重写了 operator new 和 operator delete。 实际上也可以 重载全局的 operator new 和 operator delete。 重载了全局的 operator new 和 operator delete 会对整个.cpp中的所有其作用&a…

Jenkins(本地Windows上搭建)上传 Pipeline构建前端项目并将生成dist文件夹上传至指定服务器

下载安装jdk https://www.oracle.com/cn/java/technologies/downloads/#jdk21-windows 下载jenkins window版 双击安装 https://www.jenkins.io/download/thank-you-downloading-windows-installer-stable/ 网页输入 http://localhost:8088/ 输入密码、设置账号、安装推…

2024-2-4-复习作业

源代码&#xff1a; #include <stdio.h> #include <stdlib.h> typedef int datatype; typedef struct Node {datatype data;struct Node *next;struct Node *prev; }*DoubleLinkList;DoubleLinkList create() {DoubleLinkList s(DoubleLinkList)malloc(sizeof(st…

「连载」边缘计算(十三)02-01:边缘部分源码(源码分析篇)

&#xff08;接上篇&#xff09; 配置模块初始化 配置模块初始化具体如下所示。 err : archaius.Init() ... CONFIG archaius.GetConfigFactory() &#xff08;3&#xff09; 获取内存配置源 获取内存配置源具体如下所示。 ms : memoryconfigsource.NewMemoryConfigurati…

小程序配置服务器域名

配置小程序的服务器域名是一个重要的步骤&#xff0c;因为它关系到小程序能否正常访问后端服务。在微信小程序中&#xff0c;出于安全考虑&#xff0c;所有的网络请求都需要在小程序管理后台进行域名配置&#xff0c;只有配置过的域名才可以被小程序访问。 步骤概述 获取服务器…

微服务调用之Dubbo实现

目录 RPC与Dubbo Springboot整合Dubbo 服务端实现 消费端实现 RPC与Dubbo RPC&#xff08;Remote Procedure Call&#xff09;是指远程过程调用。 常见的RPC框架有Dubbo&#xff08;Alibaba &#xff09;、gRPC&#xff08;Google&#xff09;、Thrift&#xff08;Facebo…

【Web】CVE-2021-22448 Log4j RCE漏洞学习

目录 复现流程 漏洞原理 复现流程 启动HTTP->启动LDAP->执行Log4j vps起个http服务,放好Exploit.class这个恶意字节码 LDAPRefServer作为恶意LDAP服务器 import java.net.InetAddress; import java.net.MalformedURLException; import java.net.URL; import javax.ne…

WordPress主题YIA如何将首页的置顶小工具改为站长推荐小工具?

YIA主题有“置顶推荐”小工具&#xff0c;首页文章列表页有置顶功能&#xff0c;可在YIA主题设置 >> 列表 >> 首页-最新发布 >> 显示置顶文章中开启或关闭。如果将“置顶推荐”小工具添加到“首页顶栏”&#xff0c;同时也开启首页最新发布的“显示置顶文章”…

代码生成器(新):mybatis-plus-generator使用指南

代码生成器&#xff08;新&#xff09;官网 后端代码&#xff1a;点击查看 LearnElementUiAndSpringBoot 提醒&#xff1a;LearnElementUiAndSpringBoot下载完后&#xff0c;在运行调试 Main.java里的main方法之前&#xff0c;除了utils包和Main.java文件&#xff0c;其他包需…

小程序中封装下拉选择框

小程序中没有现成的下拉选择组件&#xff0c;有个picker组件&#xff0c;但是是底部弹出的&#xff0c;不满足我的需求&#xff0c;所以重新封装了一个。 封装的下拉组件 html部分&#xff1a; <view class"select_all_view"><!-- 内容说明&#xff0c;可…

开源软件的未来发展趋势

开源软件的影响力 开源软件的影响力已经渗透到全球的各个角落&#xff0c;不仅改变了软件开发的方式&#xff0c;也影响了整个技术产业的发展。以下是开源软件影响力的一些主要方面&#xff1a; 推动技术创新&#xff1a;开源软件的开放性和协作性促进了技术的快速创新。全球的…

C# OMRON PLC FINS TCP协议简单测试

FINS(factory interface network service)通信协议是欧姆龙公司开发的用于工业自动化控制网络的指令&#xff0f;响应系统。运用 FINS指令可实现各种网络间的无缝通信&#xff0c;包括用于信息网络的 Etherne(以太网)&#xff0c;用于控制网络的Controller Link和SYSMAC LINK。…

openEuler 22.03 docker安装elasticsearch 7.17.17

Docker是一个开源的应用容器引擎&#xff0c;它允许开发者打包他们的应用以及应用的依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的Linux机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间不会有任何接口。 以下是使用Docker安装…

sklearn实现数据标准化(Standardization)和归一化(Normalization)

标准化&#xff08;Standardization&#xff09; sklearn的标准化过程&#xff0c;即包括Z-Score标准化&#xff0c;也包括0-1标准化&#xff0c;并且即可以通过实用函数来进行标准化处理&#xff0c;同时也可以利用评估器来执行标准化过程。接下来我们分不同功能以的不同实现…

mysql问题

面试官&#xff1a;MySQL中&#xff0c;如何定位慢查询? 候选人&#xff1a; 嗯~&#xff0c;我们当时做压测的时候有的接口非常的慢&#xff0c;接口的响应时间超过了2秒以上&#xff0c;因为我们当时的系统部署了运维的监控系统Skywalking &#xff0c;在展示的报表中可以看…

es6中标签模板

之所以写这篇文章&#xff0c;是因为标签模板是一个很容易让人忽略的知识点 首先我们已经非常熟悉模板字符串的使用方法 const name "诸葛亮" const templateString hello, My name is ${name}标签模板介绍 这里的标签模板其实不是模板&#xff0c;而是函数调用…