5.1数组的定义

定义:

由一组类型相同的数据元素构成的有序集合,每个数据元素称为一个数据元素(简称元素),每个元素受n(n>=1)个线性关系的约束,每个元素在n个线性关系中的序号i1、i2…in称为元素的下标,并称为n元数组

二维数组是数据元素为线性表的线性表
数组没有插入和删除操作:因为数组一旦被定义,它的维数和维界就不再改变
数组的基本操作:

1.存取:给定一组下标,读出对应的数组元素
2.修改:给定一组下标,存储或修改与其相对应的数组元素

存取和修改操作本质上只对应一种操作:寻址

存储方式:没有插入删除操作,故不用预留空间,不适合采用顺序存储

5.2数组的顺序表示和实现----- 一维数组

设一维数组的下标范围为闭区间[l,h],每个数组元素占用c个存储单元,则其任一元素ai的存储地址为: Loc(ai)=Loc(aL)+(i-L)*c

由于内存空间是一维的,将二维数组表示为一维结构的方法有:

1.按航有线:先行后列,先存储行号较小的元素,行号相同者先存储列号较小的元素
2.按列优先:先列后行,先存储列号较小的元素,列号相同者先存储行号较小的元素

第aij个元素前面的元素个数

=整行数每行表示的元素个数+本行中aij前面的元素个数
=(i-L1)
(h2-L2+1)+(j-L2)

寻址:

按行优先存储的寻址:

Loc(aij)
=Loc(L1L2)+aij之前的元素个数L // Loc(L1L2)为存储的第一个元素的位置
=Loc(L1L2)+((i-L1)
(h2-L2+1)+(j-L2) )*c //每个元素占c个单元

三维数组:

a[m1][m2][m3]: //m1为页数,m2 m3分别为行数和列数
LOC(i1,i2,i3)
=起始地址+前i1页总元素个数+第i1页的前i2行总元素个数+第i2行前i3列元素个数
= a + i1m2m3 + i2*m3+i3

n维数组

5.3矩阵的压缩存储

*特殊矩阵:包括对称矩阵,三角矩阵,对角矩阵,和稀疏矩阵
*系数矩阵:矩阵中有很多零元素

压缩矩阵的基本思想:
为多个值相同的元素只分配一个存储空间
对0元素不分配存储空间

压缩对称矩阵: 特点:aij=aji

只存储下三角部分的元素**【默认】**

令数组下标从0开始时:aij在一维数组的下标就是该元素前面元素的个数,即ak中k=i*(i+1)/2+j

对下三角中的元素aij(i>=j),在数组SA中的下标k与i,j的关系为:k=i(i+1)/2+j
上三角中的元素aij(i<j),因为aij=aji,则访问和他对应的元素aji即可,即k=j(j+1)/2+i // 【i和j谁大谁在前面

eg:一十阶对称矩阵A,采用压缩方式存储,以行序为主存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a68的地址为实际上是a86,因为下三角形矩阵的上半部分为空

5-数据结构-数组的学习相关推荐

  1. 数据结构与算法学习笔记之 从0编号的数组

    数据结构与算法学习笔记之 从0编号的数组 前言 数组看似简单,但掌握精髓的却没有多少:他既是编程语言中的数据类型,又是最基础的数据结构: 一个小问题: 为什么数据要从0开始编号,而不是 从1开始呢? ...

  2. Caché 实操《Caché 算法与数据结构-数组原理》学习笔记

    参考书  第二章 Caché 算法与数据结构 数组原理_yaoxin521123的博客-CSDN博客 本人Cache'小白,欢迎指教和交流.本文为学习原作者的代码进行代码重现后的总结精炼.使用数据库: ...

  3. 数据结构第二章学习总结

    数据结构第二章学习总结 在数据结构第二章,我们学习了线性表的两种结构顺序和链式结构,学习了他们的定义,不同,存储结构和逻辑结构,还有一些基本的操作. 在学习过程中,我发现了许多问题:①书上的大多数代码 ...

  4. 七桥问题c语言程序数据结构,数据结构与算法学习——图论

    什么是图? 在计算机程序设计中,图结构也是一种非常常见的数据结构 但是图论其实是一个非常大的话题 图结构是一种与树结构有些相似的数据结构 图论是数学的一个分支,并且在数学概念上,树是图的一种 它以图为 ...

  5. 【C/C++学院】0828-数组与指针/内存分配/数据结构数组接口与封装

    [送给在路上的程序员] 对于一个开发者而言,能够胜任系统中任意一个模块的开发是其核心价值的体现. 对于一个架构师而言,掌握各种语言的优势并可以运用到系统中,由此简化系统的开发,是其架构生涯的第一步. ...

  6. 数据结构与算法学习笔记之 提高读取性能的链表(上)

    数据结构与算法学习笔记之 提高读取性能的链表(上) 前言 链表(Linked list)比数组稍微复杂一点,在我们生活中用到最常见的应该是缓存,它是一种提高数据读取性能的技术,常见的如cpu缓存,浏览 ...

  7. 数据结构与算法学习笔记4:递归+分治法

    数据结构与算法学习笔记4 递归 斐波那契数列 青蛙跳台阶问题 链表倒序打印 分治法 二分查找/折半查找 Binary Search 题目1:快速幂 题目2:如何判断一个数是否为2的次幂 递归 指在函数 ...

  8. 数据结构与算法学习⑤(BFS和DFS 贪心算法 二分查找)

    数据结构与算法学习⑤ 数据结构与算法学习⑤ 1.BFS和DFS 1.1.深度优先搜索算法 1.2.广度优先搜索算法 面试实战 102. 二叉树的层序遍历 104. 二叉树的最大深度 515. 在每个树 ...

  9. 完全背包问题贪心算法c语言,数据结构与算法学习之路:背包问题的贪心算法和动态规划算法...

    一.背包问题描述: 有N种物品和一个重量为M的背包,第i种物品的重量是w[i],价值是p[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包重量,且价值总和最大. 二.解决方法: 1.贪心算 ...

  10. LeetCode数据结构与算法学习Day03

    LeetCode数据结构与算法学习Day03 图解数据结构与算法 59 I 滑动窗口最大值 题目描述: 解题思路: 59 II 队列的最大值 题目描述: 解题思路: 67 把字符串转换成整数 题目描述 ...

最新文章

  1. 基于CUDA实现立方体贴图 (Cubemaps) 转换为全景图 (Equirectangular Panorama)
  2. 【ES6】数组的拓展
  3. 解决xcode打开时假死的问题
  4. python中打开文件提示编码当时错误_Python:文件编码错误
  5. 7-5 密码锁 (10 分)
  6. php如何解决并发问题,PHP如何解决并发问题
  7. golang获取程序运行路径
  8. Python抓取豆瓣电影详情并提取信息
  9. Allegro之测量时显示两种单位(mil mm)
  10. 链接脚本在编程中的高级运用之一:可变长数组
  11. 线下交易如何避免微信和支付宝交易风控
  12. 8.(高级)CSS形状之:菱形图片
  13. 对于2019全国高速公路视频联网工作实施方案的理解:视频上云网关与省级视频云平台
  14. java手机 上网_Java也懂智能! 中低端手机上网小攻略
  15. 设计师找灵感,这5个网站就够了
  16. 六种常见WIFI部署场景
  17. 微信充值页面开发总结
  18. matlab handles结构体及用法
  19. 程序员怎么悄无声息迈过36岁大槛?
  20. MIUI7 系统应用精简(米5、红米note3)

热门文章

  1. Element-UI中Cascader 级联选择器使用
  2. 用Jenkins自动化搭建测试环境_入门试炼06
  3. 小程序开发(13)-location定位
  4. Java-异常02 捕获和抛出异常
  5. git commit提交代码时提示LF与CRLF转换问题 error
  6. oracle 出参类型定义,Oracle plsql出参clob类型的操作
  7. BugkuCTF-MISC题虎符
  8. 算法代码中的循环矩阵在哪体现_「Machine Learning 学习小结」| 向量在梯度下降算法当中的应用...
  9. 蚂蚁森林快捷指令_iPhone「快捷指令」怎么玩?玩法太多,别让这个功能吃灰
  10. @bean注解和@component注解的区别_通过源码查看 @Component,@Service 等注解是如何被解析的...