数据结构(超详细讲解!!)第二十节 数组

news2024/11/30 0:41:26

1.定义

1.概念

相同类型的数据元素的集合。    

记作:A=(A0,A1,…,Am-1)

二维数组可看作是每个数据元素都是相同类型的一维数组的一维数组。多维数组依此类推。

二维数组是数据元素为线性表的线性表。

A=(A0,A1,……,An-1)

其中:  Ai=(ai0,ai1,……,ai m-1)         (0≤i≤n-1)

 Am×n的二维数组

矩阵Am×n看成n个列向量的线性表

矩阵Am×n看成m个行向量的线性表

 以上我们以二维数组为例介绍了数组的结构特性,实际上数组是一组有固定个数的元素的集合。

 也就是说,一旦定义了数组的维数和每一维的上下限,数组中元素的个数就固定了。      

例如二维数组A3×4,它有3行、4列,即由12个元素组成。

由于这个性质,使得对数组的操作不像对线性表的操作那样可以在表中任意一个合法的位置插入或删除一个元素。      

对于数组的操作一般只有两类:                        

(1) 获得特定位置的元素值;                        

(2) 修改特定位置的元素值。

2.数组的逻辑结构定义

数组的逻辑结构定义:ARRAY=(D, R)

其中D是数据元素的集合,R是描述下标的关系的集合

由此,对于一维数组有:

c1 ,d1为一维数组下标的下界和上界。

二维数组:

n维数组:

逻辑特性:

3.数组的抽象类型定义:

基本操作:

基本操作:
   InitArray(&A,n,bound1,…,boundn)
          操作结果:若维数n和各维长度合法,则构造相应的数组A,并返回OK。
    DestroyArray(&A)
          操作结果:销毁数组A。
    Value(A,&e,index1,…,indexn)
          初始条件:A 是n维数组,e为元素变量,随后是n个下标值。
              操作结果:若各下标不越界,则e赋值为所指定的A的元素值,并返回OK。
    Assign(&A,e,index1,…,indexn)
          初始条件:A是n维数组,e为元素变量,随后是n个下标值。
              操作结果:若下标不越界,则将e的值赋值给所指定的A的元素,并返回OK。
}//ADT Array

2.数组的顺序表示和实现

由于数组的运算一般不包括插入和删除,因此不必考虑数据元素的移动。因而采用顺序存储方式是较为适宜的。

(1)行主次序存取,即把二维数组看成行向量组成的一维结构。

此方式下的存储映象为:行主次序

(2)列主次序存取,即把二维数组看成列向量   组成的一维结构。

此方式下的存储映象为:列主次序

假设有一个3×4×2的三维数组A ,共有24个元素,其逻辑结构如图所示。

 三维数组元素的标号由三个数字表示,即行、列、纵三个方向。

a142表示第1行,第4列,第2纵的元素。

如果对A3×4×2(下标从1开始)采用以行为主序的方法存放,即行下标变化最慢,纵下标变化最快,则顺序为:

       a111,a112,a121,a122, …,a331,a332,a341,a342       

采用以纵为主序的方法存放, 即纵下标变化最慢, 行下标变化最快, 则顺序为:    

 a111,a211,a311,a121,a221,a321,…,a132,a232,a332,a142,a242,a342  

按上述两种方式顺序存储的数组,只要知道整个数组的起始地址、维数和每维的上下界,以及每个数组元素所占用的单元数,就可以将数组元素的存储地址表示为其下标的线性函数。

因此,顺序存储的数组是一种随机存取的结构。

3.二维数组的顺序存储

以二维数组Am×n为例,假设每个元素只占一个存储单元,“以行为主”存放数组,下标从1开始,首元素a11的地址为Loc[1, 1],求任意元素aij的地址。aij是排在第i行,第j列,并且前面的第i-1行有n×(i-1)个元素,第i行第j个元素前面还有j-1个元素。

由此得到如下地址计算公式: Loc[i, j]=Loc[1, 1]+n×(i-1)+(j-1)

 根据计算公式,可以方便地求得aij的地址是Loc[i, j]。如果每个元素占size个存储单元,

则任意元素aij的地址计算公式为: Loc[i, j]=Loc[1, 1] + (n×(i-1)+j-1)×size

4.三维数组的顺序存储

 三维数组A(1..r ,  1..m ,  1..n)可以看成是r个m×n的二维数组。

  假定每个元素占一个存储单元,采用以行为主序的方法存放,即行下标r变化最慢, 纵下标n变化最快。 首元素a111的地址为Loc[1, 1, 1],求任意元素aijk的地址。        

显然,ai11的地址为Loc[i, 1, 1]=Loc[1, 1, 1]+(i-1)×m×n, 因为在该元素之前, 有i-1个m×n的二维数组。由ai11的地址和二维数组的地址计算公式,不难得到三维数组任意元素aijk的地址:    

Loc[i, j, k]=Loc[1, 1, 1]+(i-1)×m×n+(j-1)×n+(k-1) 其中1≤i≤r,1≤j≤m, 1≤k≤n。、

 如果将三维数组推广到一般情况,即:用j1、j2、j3代替数组下标i、j、k, 并且j1、j2、j3的下限为c1、c2、c3,上限分别为d1、 d2、d3,每个元素占一个存储单元,则三维数组中任意元素a(j1, j2,j3)的地址为:

Loc[j1, j2, j3]=Loc[c1, c2, c3]+l×(d2-c2+1)×(d3-c3+1)×(j1-c1) +l×(d3-c3+1)×(j2-c2)+l×(j3-c3)

其中l为每个元素所占存储单元数。

令α1=l×(d2-c2+1)×(d3-c3+1),  α2=l×(d3-c3+1), α3=1

则: Loc[j1, j2, j3]=Loc[c1, c2, c3]+α1×(j1-c1)+α2×(j2-c2)+α3(j3-c3)=Loc[c1, c2, c3]+∑αi×(ji-ci)     (1≤i≤3) 

 由公式可知Loc[j1, j2, j3]与j1, j2, j3呈线性关系。        

对于n维数组A(c1∶d1, c2∶d2,…, cn∶dn),我们只要把上式推广,就可以容易地得到n维数组中任意元素aj1j2…jn的存储地址的计算公式:

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

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

相关文章

docker 下安装mysql8.0

在docker中查询mysql镜像 PS C:\Users\admin> docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relation……

每个外贸人都有一颗不甘的心

是不是每个三十多岁的外贸人都有一颗不安现状的心?总是想挑战一下自己的极限或者是拓宽一下自己未知的领域? 最近遇到一个经常去各个国家参加展会来获取客户的外贸人,他的第一话题不是自己去展会的效果如何,也不是说自己现在做的…

更好看更好听的百元真无线耳机,BarbetSound Buds T60上手

现在的真无线蓝牙耳机已经很成熟了,选择也特别多,大家很容易找到适合自己的款式。我比较关注耳机在续航、音质等方面的表现,最近用的是来自BarbetSound的Buds T60,这款耳机轻巧便携,而且音质非常好,性价比十…

【LLM】预训练||两句话明白儿的底层原理

预训练鼻祖阶段:目前认为是Bert时期 从字面上看,预训练模型(pre-training model)是先通过一批语料进行训练模型,然后在这个初步训练好的模型基础上,再继续训练或者另作他用。这样的理解基本上是对的&#…

学习笔记|两组率卡方检验和Fisher确切法|适用条件|规范表达|《小白爱上SPSS》课程:SPSS第十五讲 | 两组率卡方检验和Fisher确切法怎么做?

目录 学习目的软件版本原始文档两组率卡方检验和Fisher确切法适用条件简述一、实战案例读数据: 二、统计策略三、SPSS操作四、结果解读第一,分组统计描述结果第二,卡方检验。 五、规范报告1、规范表格2、规范文字 学习目的 SPSS第十五讲 | 两…

Scala语言用Selenium库写一个爬虫模版

首先,我将使用Scala编写一个使用Selenium库下载yuanfudao内容的下载器程序。 然后我们需要在项目的build.sbt文件中添加selenium的依赖项。以下是添加Selenium依赖项的代码: libraryDependencies "org.openqa.selenium" % "selenium-ja…

Web APIs——节点操作

1、DOM节点 DOM节点:DOM树里每一个内容都称之为节点 节点类型: 元素节点 所有的标签 比如body、div属性节点 所有的属性 比如 href文本节点 所有的文本其他 2、查找节点 关闭二维码案例: 点击关闭按钮,关闭的是二维码的盒子&#…

Maven系列第10篇:设计你自己的maven插件【高手必备】

Maven默认提供了很多插件,功能也非常强大,但是如果我们想自己开发一些插件,比如自定义一款自动打包并且发布到服务器然后重启服务器的插件;或者定义一款插件自动打包自动运行打包好的构件。各种好玩的东西只要你能想到&#xff0c…

Python中表单的处理

目录 1. 表单的基本概念 2. 使用Flask处理表单 3. 表单验证 4. 数据存储 5. 使用数据库存储表单数据 6. 安全性考虑 总结 当我们谈论Web开发时,表单处理是一个不可避免的话题。表单是Web应用程序中用户输入数据的界面,而处理这些数据则是后端开发…

从零开始制作一个割草机器人

项目背景 为啥要做一个割草机器人呢?(个人因素:我梦想就是做一款人形机器人保护人类,解放人类) 基础准备:我们公司本身做过高精度,基于高精度的技术扩展到农机自动化驾驶。目前可以实现AB线拖…

【qemu逃逸】BlizzardCTF2017-strng

前言 虚拟机用户名:ubuntu 密码:passw0rd 一道入门题,看下启动脚本: ./qemu-system-x86_64 \-m 1G \-device strng \-hda my-disk.img \-hdb my-seed.img \-nographic \-L pc-bios/ \-enable-kvm \-device e1000,netdevnet0 \…

微信自动回复有什么好处?怎么设置?

微信自动回复有什么好处? 首先,它可以帮助我们节省时间和精力。当我们无法立即回复消息时,自动回复可以及时告知对方我们的状况,避免对方的焦虑和不便。 其次,自动回复可以增强沟通效率。无论是工作还是个人生活中&a…

sqlsugar查询数据库下的所有表,批量修改表名字

查询数据库中的所有表 using SqlSugar;namespace 批量修改数据库表名 {internal class Program{static void Main(string[] args){SqlSugarClient sqlSugarClient new SqlSugarClient(new ConnectionConfig(){ConnectionString "Data Source(localdb)\\MSSQLLocalDB;In…

SSD-1B:Segmind的加速稳定扩散模型

Segmind 稳定扩散模型 (SSD-1B) 是稳定扩散 XL (SDXL) 缩小 50% 的精简版本,可提供 60% 的加速,同时保持高质量的文本到图像生成功能。 它已经过各种数据集的训练,包括 Grit 和 Midjourney scrap 数据,以增强其根据文本提示创建各…

Find My卡片|苹果Find My技术与卡片结合,智能防丢,全球定位

钱包是许多人正常生活必备的物品,如果丢失钱包,不仅是钱的损失,还因为丢失了证件和银行卡,导致我们需要话费大量时间去补办,造成生活的不便。如今防丢卡片的出现将减少这类问题的发生。 在智能化加持下,防丢…

Python库Requests的爬虫程序爬取视频通用模版

这是一个使用Python库Requests的爬虫程序,用于爬取网上的视频。代码必须使用以下代码:爬虫IP主机为duoip,爬虫IP端口为8000。 import requests proxy_host "duoip" proxy_port 8000 url "目标网站" headers {"U…

BI数据可视化报表开发教程,手把手教你做报表

在奥威BI数据可视化平台上,BI数据可视化报表有两种做法。一种是使用报表模板,极速开发报表;一种是从零开始一步一步,个性化开发报表。这两种报表开发在效率上会拉开一定距离,操作繁琐程度不一,但总体来看都…

DG双击后没有反应的解决办法

在Win 97 x64 上安装 DG 相关文件后使用正常, 但是换了一台电脑,注册运行使用后一次之后,再双击 图标没有反应,现将处理方法介绍如下: 【方法1:更名法】 找到“当前用户”目录,可以看到系统隐…

功率放大器功能及用途介绍

功率放大器是一种用于将输入信号的电压放大到更高水平的电子设备。它在各个领域中发挥着重要作用,包括音频、通信、测量和控制等应用。下面Aigtek安泰电子将详细介绍功率放大器的功能及其主要用途。 图:ATA-3000系列功率放大器 功率放大器的功能介绍&…

产品运营是做什么的?新手运营必读篇

产品运营是产品取得成功,实现产品的商业目标的重要支撑。产品运营岗位的专业能力要求庞杂,在岗或准备入坑人员应该如何巩固自身的知识/技能树? 本文将介绍产品运营相关的知识,希望能帮助你找到提升竞争力的思路! 产品…