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

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

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

相关文章

【Python第三方库】PyQt5安装与应用

文章目录 引言安装PYQT5基于Pyqt5的简单桌面应用常用的方法与属性QtDesigner工具使用与集成窗口类型QWidget和QMainWindow区别 UI文件加载方式直接加载UI文件的方式显示窗口转化py文件进行显示窗口 PyQt5中常用的操作信号与槽的设置绑定页面跳转 引言 PyQt5是一个流行的Python…

自动化测试--WebDriver API

1. 元素定位方法 通过 ID 定位&#xff1a;如果元素具有唯一的 ID 属性&#xff0c;可以使用 findElement(By.id("elementId")) 方法来定位元素。通过 Name 定位&#xff1a;使用 findElement(By.name("elementName")) 来查找具有指定名称的元素。通过 Cl…

哈默纳科HarmonicDrive谐波减速机的使用寿命计算

在机械传动系统中&#xff0c;减速机的应用无处不在&#xff0c;而HarmonicDrive哈默纳科谐波减速机以其独特的优势&#xff0c;如轻量、小型、传动效率高、减速范围广、精度高等特点&#xff0c;成为了众多领域的选择。然而&#xff0c;任何机械设备都有其使用寿命&#xff0c…

通信原理-思科实验三:无线局域网实验

实验三 无线局域网实验 一&#xff1a;无线局域网基础服务集 实验步骤&#xff1a; 进入物理工作区&#xff0c;导航选择 城市家园; 选择设备 AP0&#xff0c;并分别选择Laptop0、Laptop1放在APO范围外区域 修改笔记本的网卡&#xff0c;从以太网卡切换到无线网卡WPC300N 切…

java 对象模型的个人理解

文章目录 一、OOP-KCLASS 模型二、疑惑2.1 为什么还需要一个 Class对象&#xff1f;2.2 new 关键字和 Class.newInstance() 的区别&#xff1f; 一、OOP-KCLASS 模型 java 采用了field和method分离的方式&#xff0c;field组成实例 obj &#xff0c;存储在堆区&#xff0c;而m…

yarn安装electron时报错RequestError:socket hang up

安装electron时候&#xff0c;出现RequestError:socket hang up这样的错误&#xff0c;找了半天很多方式都是用旧淘宝源&#xff0c;导致根本安装不上去。 在项目的根目录下创建.npmrc文件&#xff0c;添加以下内容 # registryhttps://mirrors.huaweicloud.com/repository/np…

Umi-OCR:功能强大且易于使用的本地照片识别软件

Umi-OCR是一款开源且免费的离线OCR&#xff08;光学字符识别&#xff09;软件&#xff0c;可让您轻松从照片中提取文本。它支持多种语言&#xff0c;并具有许多其他功能使其成为照片识别任务的绝佳选择。 Umi-OCR的优势 离线操作&#xff1a; Umi-OCR无需互联网连接即可工作&…

服务器数据恢复—raid信息丢失导致RAID无法被识别的数据恢复案例

服务器数据恢复环境&故障&#xff1a; 某单位机房搬迁&#xff0c;将所有服务器和存储搬迁到新机房并重新连接线路&#xff0c;启动所有机器发现其中有一台服务器无法识别RAID&#xff0c;提示未做初始化操作。 发生故障的这台服务器安装LINUX操作系统&#xff0c;配置了NF…

Spring中使用到的设计模式及其源码分析

前言 众所周知&#xff0c;Spring框架是一个强大而灵活的开发框架。这不&#xff0c;上次的面试刚问到这些&#xff0c;没防住&#xff01;&#xff01;&#xff01;因此下来总结一下。这篇文章主要介绍Spring中使用到的设计模式&#xff0c;自己做个面试复盘&#xff0c;同时…

MySQL SQL 编程练习

目录 创建表并插入数据 查看表结构 创建触发器 创建INSERT 触发器 创建DELETE 触发器 创建更新触发器 创建存储过程 创建提取emp_new表所有员工姓名和工资的存储过程s1 创建存储过程s2&#xff0c;实现输入员工姓名后返回员工的年龄 创建一个存储过程s3&#xff0c;有2个参数&…

Navicat图形化管理工具安装教程

1、Navicat简介 Navicat 是一套快速、可靠的数据库管理工具&#xff0c;专为简化数据库的管理及降低系统管理成本而开发。它的设计符合数据库管理员、开发人员及中小企业的需要。Navicat使用直觉化的图形用户界面&#xff0c;让用户能够安全简单的方式创建、组织、访问并共用信…

《华为数据之道》读书笔记六---面向自助消费的数据服务建设

七、从结果管理到过程管理&#xff0c; 从能“看”到能“管” 1、数据赋能业务运营 数字化运营旨在利用数字化技术获取、管理和分析数据&#xff0c;从而为企业的战略决策与业务运营提供可量化的、科学的支撑。 数字化运营归根结底是运营&#xff0c;旨在推动运营效率与能力的…

第1章 初识 C 语言

目录 1.1 C 语言的起源 1.2 选择 C 语言的理由 1.2.1 设计特性 1.2.2 高效性 1.2.3 可移植性 1.2.4 强大而灵活 1.2.5 面向程序员 1.2.6 缺点 1.3 C 语言的应用范围 1.4 计算机能做什么 1.5 高级计算机语言和编译器 1.6 语言标准 1.6.1 第 1 个 ANSI/ISO C 标准 …

图形/视图架构的基本概念

本文整理了图形/视图架构的基本概念 使用图形/视图架构&#xff0c;我们可以绘制复杂的由成千上万个基本图形组件组成的图形&#xff0c;并且每个图形组件是可选择、可拖放和可修改的&#xff0c;类似于矢量绘图软件的绘图功能。 图形/视图架构的组成 图形/视图架构主要由 …

数据结构之队列详解

1.队列的概念以及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出FIFo(Frist in Frist out)的特性 入队列&#xff1a;进行插入才操作的一端称为队尾 出队列&#xff1a;进行删除操作的一…

智能编程,一触即发:使用AIGC优化CSS——提升前端开发效率与质量

文章目录 一、AIGC在CSS优化中的应用场景智能代码生成自动布局调整性能优化建议样式和色彩建议 二、使用AIGC优化CSS的具体步骤明确需求选择AIGC工具输入描述或设计稿审查和调整集成和测试 三、AIGC优化CSS的优势与挑战优势&#xff1a;挑战&#xff1a; 《CSS创意项目实践&…

从0到1:理发店预约剪发小程序开发笔记(上)

背景 理发师可以在小程序上设置自己的可预约时间&#xff0c;价格&#xff0c;自我介绍&#xff0c;顾客可以根据理发师的日程安排选择合适的时间进行预约和支付。这样可以提高预约的效率&#xff0c;减少沟通成本&#xff0c;方便双方的安排。 功能规划 首页展示&#xff1…

spine to unity-2.利用边缘框实现实时碰撞检测

主要讲spine的边缘框&#xff0c;在unity中&#xff0c;实现实时碰撞检测。其中使用的素材&#xff0c;是我为独立游戏ink制作的动画。独立游戏ink的开发日志&#xff0c;在小红薯持续更新中。spine工具包的安装&#xff0c;下载请参考spine to unity-1spine BoundingBoxFollow…

CTF-Web习题:[GXYCTF2019]Ping Ping Ping

题目链接&#xff1a;[GXYCTF2019]Ping Ping Ping 解题思路 访问靶机&#xff0c;得到如下页面&#xff0c;类似于URL参数 尝试用HackBar构造url传输过去看看 发现返回了ping命令的执行结果&#xff0c;可以猜测php脚本命令是ping -c 4 $ip&#xff0c;暂时不知道执行的函数…

【UbuntuDebian安装Nginx】在线安装Nginx

云计算&#xff1a;腾讯云轻量服务器 操作系统&#xff1a;Ubuntu-v22 1.更新系统软件包列表 打开终端并运行以下命令来确保你的系统软件包列表是最新的&#xff1a; sudo apt update2.安装 Nginx 使用以下命令安装 Nginx&#xff1a; sudo apt install nginx3.启动 Nginx…