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()取表尾(广义表中除了第一个表元素之外的其他所有表元素构成的表,非空广义表的表尾必定是一个表,即使表尾是单元素)操作。

  • 13
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yoyo勰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值