数据结构 每日一练:选择 + 编程

news2025/1/16 20:00:21

目录

选择

选择题总结

        特殊矩阵的压缩存储

1.对阵矩阵

2.三角矩阵

3.三对角矩阵(带状矩阵)

编程


选择

1.

设有一个 10 阶的下三角矩阵 A (包括对角线),按照行优先的顺序存储到连续的 55 个存储单元中,每个数组元素占 1 个字节的存储空间,则 A[5][4] 地址与 A[0][0] 的地址之差为 ()

A.  10                                B.  19                              C.  28                              D.  55

 答案:B

解析:下三角矩阵A,
                        A[5][5]的地址:1+2+3+4+5+6=21
                        A[5][4]地址:21-1=20
                        A[5][4]-A[0][0]=20-1=19  //减1是因为数组下标从0开始

2.

JDK8之前版本,HashMap的数据结构是怎样的?

A.  数组                      B.  链表                        C.  数组+链表/红黑树                  D.  二叉树

答案:C

解析:HashMap在Node数组中进行哈希查找,使用链接法处理冲突,冲突较少时使用链表,目前版本当冲突的键达到8时,会把链表转换为红黑树. 

3.

将10阶对称矩阵压缩存储到一维数组A中,则数组A的长度最少为()

A.  100                         B.  40                          C.  55                      D.  80

答案:C

解析:主对角线都存:10个,剩下的90个只存一半45个,共55个

 n(a1+an)/2  等差求和公式  10(1+10)/2 = 55

4.

定义数组char a[][3] = {1,2,3,4,5,6,7,8},则数组a的第一维的大小是多少 ()

A.  2                      B.  3                            C.  4                       D.  无法确定

 答案:B

解析:每行只能存3个数,有8个数,所以要三行才能存完(此时有一个空位,c语言会补0),所以数组a就是三行三列。

                                        1     2     3

                                        4     5     6

                                        7     8     0

5.

设有一个10阶对称矩阵A[10][10],采用压缩存储方式按行将矩阵中的下三角部分的元素存入一维数组B[  ]中,A[0][0]存入B[0]中,则A[8][6]在B[  ]的(    )位置。    

A.  32                                     B.  33                          C.  42                         D.  65

答案:C

解析: 

由于是对称矩阵,因此压缩存储可以认为只要存储下三角矩阵。

(0,0)                                                           1

(1,0)(1,1)                                                    2

(2,0)(2,1) (2,2)                                           3

(3,0)(3,1) (3,2) (3,3)                                   4

(4,0)(4,1) (4,2) (4,3) (4,4)                           5

(5,0)(5,1) (5,2) (5,3) (5,4) (5,5)                   6 

(6,0)(6,1) (6,2) (6,3) (6,4) (6,5) (6,6)          7

(7,0)(7,1) (7,2) (7,3) (7,4) (7,5) (7,6) (7,7)  8 

(8,0)(8,1) (8,2) (8,3) (8,4) (8,5) (8,6)          7

1+2+3+4+5+6+7+8+7-1=42   //减1是因为数组下标从0开始

另一种方法:

下标从i=0,j=0开始,A[8][6]实际上是第9行第7列。i=9,j=7。

计算公式为:当i>j,    i(i-1)/2+j;

                     当i<j,     j(j-1)/2+i;

选择题总结

特殊矩阵的压缩存储(对称矩阵,三角矩阵和三对角矩阵)

(均假设数组的下标从0开始)

1.对阵矩阵

定义:若对一个n阶矩阵A中的任意一个元素 aᵢ,ⱼ 都有aᵢ,ⱼ=aⱼ,ᵢ (1≤i,j≤n),则称其为对称矩阵。

 存储策略:只存储主对角线+下三角区(或主对角线+上三角区),以主对角线+下三角区为例,按照行优先把这些元素放入到一维数组中,就得到了下面的样子的一维数组:

a₁₁a₂₁a₂₂a₃₁...aₙ,ₙ₋₂aₙ,ₙ₋₁aₙ,ₙ

一维数组的大小应该定义为 (1+n)*n/2, 此公式通过求和公式,将每行元素相加即可得到。

根据性质aᵢ,ⱼ=aⱼ,ᵢ可以得到矩阵所有元素与一维数组下标k的对应关系如下:

按照行优先存储原则,aᵢ,ⱼ是第几个元素?

答:因为是行优先,所以 aᵢ,ⱼ是第  1+2+...+i-1+j 个元素,即第 i*(i-1)/2+j-1个元素。

按照列优先存储原则,​​​​​​​aᵢ,ⱼ是第几个元素?

答:因为是列优先,所以先算出前 j-1 行有多少个元素,由每列元素个数与列数 j 有关,可知每列的元素个数为 n-(j-1) 个,前 j-1 行即 n-(1-1) + n-(2-1) + n-(3-1) + ··· + n-(j-1-1)个元素,化简得前  j-1行有  n+(n-1)+...+(n-j+2) 个元素。接下来再加上第 j 行的元素,也就是 ​​​​​​​aᵢ,ⱼ 所处的那一行中, 前面的元素个数,个数为 i - j 个,综上 ​​​​​​​aᵢ,ⱼ  是第 n+(n-1)+...+(n-j+2)+(i-j)+1 个元素。

2.三角矩阵

下三角矩阵的存储思想:按行优先原则将下三角区域元素(包括主对角线元素)存入一维数组中,并在最后一个位置存储常量c。 

得到一维数组:

按照行优先存储原则,​​​​​​​aᵢ,ⱼ是第几个元素? 

上三角矩阵的存储思想:按行优先原则将上三角区域元素(包括主对角线元素)存入一维数组中,并在最后一个位置存储常量c。 一维数组和下三角矩阵的一样。

按照行优先存储原则,​​​​​​​aᵢ,ⱼ是第几个元素? 

3.三对角矩阵(带状矩阵)

存储思想:按行优先或列优先原则,只存储带状部分。 

 矩阵中3条对角线上的元素​​​​​​​aᵢ,ⱼ在一维数组中存放的下标为k=2i+j-3

编程

题目:从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删除元素的值。空出的位置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行。 

思路:先判断表是否为空,为空则退出,不为空则搜索整个顺序表,查找最小元素并记住其位置,最后用最后一个元素填补空出的位置。 

//核心代码

bool  DelMin(Sqlist& L, Elemtype& value) {
	if (L.length == 0)
		return false;  //表空的话就退出操作
	value = L.data[0];
	int pos = 0;
	for (int i = 1;i < L.length;i++) { //循环查找最小元素并赋值给value
		if (L.data[i] < value) {
			value = L.data[i];
			pos = i;
		}
	}
	L.data[pos] = L.data[L.length - 1];//最后一个元素填补空出的位置
	L.length--;
	return true;
}

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

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

相关文章

vue学习之v-if/v-else/v-else-if

v-else/v-else-if 创建 demo7.html,内容如下 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Docum…

图解 LeetCode 算法汇总——回溯

本文首发公众号&#xff1a;小码A梦 回溯算法是一种常见的算法&#xff0c;常见用于解决排列组合、排列问题、搜索问题等算法&#xff0c;在一个搜索空间中寻找所有的可能的解。通过向分支不断尝试获取所有的解&#xff0c;然后找到合适的解&#xff0c;找完一个分支后再往回搜…

fastadmin的入门

fastadmin入门到完成项目 配置环境 1 运行环境 PHP > 7.2 且 < 7.4 (推荐PHP7.4版本) MySQL > 5.6 且 < 8.0 (需支持innodb引擎) Apache 或 Nginx 使用PHPstudy 运行该项目 写好apache伪静态规则 <IfModule mod_rewrite.c> Options FollowSymlinks -Multi…

什么是自动化测试po模式,po分层如何实现?

目录 一、什么是PO模式 二、什么是自动化测试框架 三、非PO模式和PO模式优缺点对比 四、如何从0到1搭建PO模型 五、自动化测试框架和PO的关系 六、总结 一、什么是PO模式 全称&#xff1a;page object model 简称&#xff1a;POM/PO PO模式最核心的思想是分层&#xf…

[BJDCTF2020]ZJCTF,不过如此 preg_replace /e模式漏洞

目录 preg_replace的/e模式 为什么要变为 {${phpinfo()}} 另一个方法 版本 <?phperror_reporting(0); $text $_GET["text"]; $file $_GET["file"]; if(isset($text)&&(file_get_contents($text,r)"I have a dream")){echo &qu…

蓝桥杯备赛Day8——队列

大家好,我是牛哥带你学代码,本专栏详细介绍了蓝桥杯备赛的指南,特别适合迎战python组的小白选手。专栏以天作为单位,定期更新,将会一直更新,直到所有数据结构相关知识及高阶用法全部囊括,欢迎大家订阅本专栏! 队列也属于基础数据结构。 队列概念 队列是一种数据结构,…

谷粒学院笔记

p37 vscode安装插件 p51 前端技术 vue生命周期 前端debug p57 nodejs介绍 下载后安装 cmd node -v node 01.js 类似java运行class文件 nodejs作为服务器(了解)

树的引进以及二叉树的基础讲解——【数据结构】

W...Y的主页 &#x1f60a; 代码仓库分享 &#x1f495; 当我们学习完前面的数据结构&#xff0c;难度也就会上升&#xff0c;但是这个也是非常重要的数据结构。今天我们来学习一种新的数据类型——树。 目录 树的概念以及结构 树的概念 树的相关概念 树的表示 树在实…

【项目管理】PM vs PMO 18点区别

导读&#xff1a;项目经理跟PMO主要有哪些区别&#xff1f;首先从定义上了解&#xff0c;然后根据其他维度进行对比分析&#xff0c;基本可以了解这二者的区别&#xff0c;文中罗列18点区别供各位参考。 目录 1、定义 1.1 PMO 1.2 PM 2、两者区别 2.1 ROI 2.2 项目成功率…

Apache HTTPD (CVE-2017-15715)换行解析漏洞复现

Apache HTTPD 换行解析漏洞 CVE-2017-15715漏洞简介 组件版本漏洞名称 Apache HTTPD 换行解析漏洞&#xff08;CVE-2017-15715&#xff09; 漏洞描述 ​ Apache HTTPD是一款HTTP服务器&#xff0c;它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞&…

微信小程序本地生活(列表页面)

一、实现效果 二、实现步骤 主要实现功能&#xff1a; 页面导航并传参上拉触底时加载下一页数据下拉刷新列表数据 实现步骤 创建列表页面动态设置页面标题定义数据&#xff0c;发起请求获取数据渲染数据并美化样式实现上拉加载数据效果对上拉触底进行节流处理上拉触底请求数…

SSMP整合综合案例【SpringBoot的基本增删改查】

一、基本页面 主页面 添加 删除 分页 条件查询 实体类开发————使用Lombok快速制作实体类 Dao开发————整合MyBatisPlus&#xff0c;制作数据层测试 Service开发————基于MyBatisPlus进行增量开发&#xff0c;制作业务层测试类 Controller开发————基于Restful…

【计算机网络】什么是WebSocket?

目录 WebSocket简介协议优点使用场景 WebSocket WebSocket是一种网络传输协议,可在单个TCP连接上进行全双工通信&#xff0c;位于OSI模型的应用层。 WebSocket使得客户端和服务器之间的数据交换变得更加简单&#xff0c;允许服务器主动向客户端推送数据。在WebSocket API中&a…

第7篇 vue的模块化与babel的转换

一 babel的转换 1.1 babel的转换 Babel是一个广泛使用的转码器&#xff0c;可以将ES6代码转为ES5代码&#xff0c;从而在现有环境执行执行。 可以现在就用 ES6 编写程序&#xff0c;而不用担心现有环境是否支持。 1.2 案例 1.新建工程&#xff0c;初始化&#xff1a; npm …

【数字人】使用Mixamo动画资源

使用Mixamo动画资源 一、获取资源和数据处理1. 获取资源2. 模型选择3. 绑定骨骼4. 动画检索5. 动画参数二、面向不同平台的处理1. 面向Unity平台的使用2. 面向UE平台的使用Mixamo是一个提供动画资源的在线平台,在游戏、虚拟现实、动画等项目添加高质量的人物动画方面实现降本增…

java面试题(17):链表两数相加

两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不会以 0 开头…

Unity Asset Bundle Browser 工具

Unity Asset Bundle Browser 工具 您可以在 Unity 项目中使用 Asset Bundle Browser 工具能够查看和编辑资源包的配置。 有关更多信息&#xff0c;请参阅 Unity Asset Bundle Browser 文档。 注意&#xff1a;此工具是不受支持的实用程序。查看极大的资源包可能会导致性能下…

Linux内存管理--smaps内存

一、内存的两个概念 了解smaps内存之前要先搞清楚Linux内存管理中的虚拟内存&#xff08;Virtual Memory&#xff09;和驻留内存&#xff08;Resident Memory&#xff09;两个概念。 1、虚拟内存 首先需要强调的是虚拟内存不同于物理内存&#xff0c;虽然两者都包含内存字眼…

数电课程设计——课设一:加减计数器

为了帮助大家更好学习FPGA硬件语言&#xff0c;创立此资源 包含文件有&#xff1a;实验报告、仿真文件&#xff0c;资料很全&#xff0c;有问题可以私信 一、实验内容 1、利用QuartusII和Modelsim实现100进制可逆计数器编码显示实验。 二、实验步骤 &#xff08;1&#xff…

GCP Architect之VPN+Network

VPN 搜索结果共计:11 [单选]As part of implementing their disaster recovery plan, your company is trying to replicate their production MySQL database from their private data center to their GCP project using a Google Cloud VPN connection. They are experien…