3.2、数据结构-数组、矩阵和广义表

数组结构

数组是定长线性表在维度上的扩展,即线性表中的元素又是一个线性表。N维数组是一种"同构"的数据结构,其每个数据元素类型相同、结构一致。

一个m行n列的数组表示如下:

其可以表示为行向量形式 (一行一行的数据)或者列向量形式 (一列一列的数据)线性表,单个关系最多只有一个前驱(入度)和一个后继(出度),本质还是线性的。

数组结构的特点:数据元素数目固定;数据元素类型相同;数据元素的下标关系具有上下界的约束且下标有序

数组数据元素固定,一般不做插入和删除运算,适合于采用顺序结构。因为插入元素后,后面的元素都要移动,比较耗时。但是适合查找

存储地址计算

数组存储地址的计算,特别是二维数组,要注意理解,假设每个数组元素占用存储长度为len,起始地址为a,存储地址计算如下:

数组类型 存储地址计算
一维数组a[n] a[i]的存储地址为:a + i * len
二维数组a[m][n] a[i][j]的存储地址(按行存储)为:a + (i * n+j) * len a[i][i]的存储地址(按列存储)为:a + (j * m+i) * len

一维数组

arr[4]数组中,arr=0x00,求arr[2]的地址

在c语言中arr这种引用类型就是数组首元素的地址,int整形占4个字节,所以arr[2]的存储地址就是0x1000+2 * 4 = 0x1008

二维数组

arr[4][5]的二维数组,arr=0x1000,求arr[1][2]的地址

按行存储:0x1000 + (1*5+2)4 =
按列存储:0x1000 + (2
4+1)*4 =

练习题

例:对于二维数组a[1 ... N,1 ... N]中的一个元素a[i,j](1≤=i,j <= N),存储在a[i,j]之前的元素个数

A.与按行存储或按列存储方式无关

B.在i=j时与按行存储或按列存储方式无关

C.在按行存储方式下比按列存储方式下要多

D.在按行存储方式下比按列存储方式下要少

答案:B

矩阵

矩阵其实就是特殊的二维数组。

  • 特殊矩阵:矩阵中的元素(或非0元素)的分布有一定的规律。常见的特殊矩阵有对称矩阵、三角矩阵和对角矩阵
  • 稀疏矩阵:在一个矩阵中,若非零元素的个数远远少于零元素个数,且非零元素的分布没有规律。

存储方式为三元组结构,即存储每个非零元素的(行,列,值)。

练习题

【2019年】某阶的三对角矩阵A如下图所示,按行将元素存储在一维数组M中,设a1,1存储在M[1],那么ai,j(1<=i, j<=n且ai,j位于三条对角线中)存储在M([])。

A、i+2j

B、2i+j

C、i+2j-2

D、2i+j-2

答案D

可以取特殊值。a1,1=M[1],将i=1,j=1带入到选择项的表达式中,看哪个=1。C和D的表达式是1。按行存储,a1,2=M[2]。将i=1,j=2带入C和D的表达式,只有D的表达式值=2

广义表

没有考过,了解即可
广义表是线性表的推广,是由0个或多个单元素或子表组成的有限序列

普通的线性表:(10,20,30,40)

广义表:(10,(21,22),30,(41,42)) 有点像不规则的二维数组

广义表与线性表的区别:线性表的元素都是结构上不可分的单元素,而广义表的元素既可以单元素,也可以是有结构的表

广义表一般记为:LS =(α12,...,αn)

其中LS是表名,αi是表元素,它可以是表(称为子表),也可以是数据元素(称为原子)。其中是广义表的长度(也就是最外层包含的元素个数),=0的广义表为空表;而递归定义的重数就是广义表的深度,即定义中所含括号的重数(单边括号的个数,原子的深度为0,空表的深度为1)。

head()取表头(广义表第一个表元素,可以是子表也可以是单元素)和tail()取表尾(广义表中除了第一个表元素之外的其他所有表元素构成的表,非空广义表的表尾必定是一个表,即使表尾是单元素)操作。

相关推荐
要开心吖ZSH2 天前
软件设计师备考-(十四)数据库设计
java·数据库·软考·软件设计师
CodingSir聊软考6 天前
【系规伴学】云资源规划核心知识点解析
软考
奔跑吧邓邓子1 个月前
【软考中级网络工程师】知识点之网关协议深度剖析
网络工程师·软考·网关协议·中级
奔跑吧邓邓子1 个月前
【软考中级网络工程师】知识点之 STP 协议,网络的 “交通协管员”
网络工程师·软考·中级·stp协议
奔跑吧邓邓子1 个月前
【软考中级网络工程师】知识点之 RIP 协议
网络工程师·软考·rip协议·中级
奔跑吧邓邓子1 个月前
【软考中级网络工程师】知识点之级联
网络工程师·软考·级联·中级
奔跑吧邓邓子1 个月前
【软考中级网络工程师】知识点之堆叠
网络工程师·软考·中级
moton20172 个月前
【软件系统架构】系列七:系统性能——路由器性能深入解析
系统架构·路由器·软考·吞吐量·软件系统架构·并发连接数·转发延迟
学习菌子2 个月前
第11章:【系统架构设计师】项目管理
系统架构·项目管理·软考高级·软考·软考系统架构设计师
June bug2 个月前
【软考中级·软件评测师】下午题·面向对象测试之架构考点全析:分层、分布式、微内核与事件驱动
经验分享·分布式·职场和发展·架构·学习方法·测试·软考