阅读 69

数据结构专升本学习,数组和数组矩阵的三种压缩

前言:

前面我们把链表,栈,队列,串,都学习的差不多了,接下我们要学习,数组了,数组在我们编程中用到很多,因为它是最基本的存储方法,它分为一维数组和二维数组,数组和之前学过的一样,我们也是可以看作一个线性表,因为数组是一个有序的序列,接下来我们简单学习一下数组和稀疏矩阵。

每日一遍,防止颓废

20171011735418_wgJbQK

1.数组

数组(Array)是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。这些有序排列的同类数据元素的集合称为数组。讲人话就是:(在C语言中a[8],a代表数组名,[]代表一个数组的写法,8代表个数,然后从0下标开始到7下标结束 ,然后有序的序列)

1.1初始化数组

int Ic[6];//这种不带值的叫声明一个数组
int Ic[6]={1,2,3,4,5,6};//这种带值的叫声明了一个数组并初始化了
char lc[6]={'1','2','3','4','5','6'};
double lc[]={1.23 , 2.6 ,5.4 ,1.5 ,6.4,3.6};//这种不带个数的初始化会根据你元素个数自动给数组设置个数复制代码

image-20211109111315121

1.2 二维数组

二维数组本质上是以数组作为数组元素的数组,即“数组的数组“,二维数组又称为矩阵,行列数相等的矩阵称为方阵。二维数组,在本质上,是一个一维数组的列表。声明一个 x 行 y 列的二维整型数组。讲人话:(a [5] [4] ,a代表数组名,5代表行数,4代表列数,我觉得这样表示比讲理论要通俗易懂的多)

int a[3][4];//声明一个二维数组
int a[3][4] = {  //声明并且初始化二维数组
 {0, 1, 2, 3} ,   /*  初始化索引号为 0 的行 */
 {4, 5, 6, 7} ,   /*  初始化索引号为 1 的行 */
 {8, 9, 10, 11}   /*  初始化索引号为 2 的行 */
};
int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};//这样也是可以的
int a[][4] = {0,1,2,3,4,5,6,7,8,9,10,11};//还有一种行号可以省略的写法,但是列好是绝对不能省略的复制代码

image-20211109113016619

1.3 特殊矩阵的压缩存储

既然提到了,我们就简单讲一下,不要被这个名字吓到了,不是很难,博主都有点不想讲,提到了,我们就简单了解一下。

1.3.1 对称矩阵

对称矩阵(Symmetric Matrices)是指以主对角线为对称轴,各元素对应相等的矩阵。在线性代数中,对称矩阵是一个方形矩阵,其转置矩阵和自身相等。

image-20211109115358229

image-20211109120209454

计算公式:

当i>=j 时,i*(i+1)/2+j
当i<j时,j*(j+1)/2+i
就是通过上面的公式得到一维数组的下标,比如:行号时i,列号是j,  ic[3][1]的值在二维里面时45,我们通过公式得到的值是
3*(3+1)/2+1=7,一维数组下标为7的值是45复制代码

1.3.2 三角矩阵

三角矩阵是方形矩阵的一种,因其非零系数的排列呈三角形状而得名。三角矩阵分上三角矩阵和下三角矩阵两种。上三角矩阵的对角线左下方的系数全部为零,下三角矩阵的对角线右上方的系数全部为零。三角矩阵可以看做是一般方阵的一种简化情形

image-20211109133915655

对重复的值进行压缩,有着两个公式,如果你的重复的值在上三角但是你的行数比列数多,还是用的上三角的公式,只是作用域变了,改变作用域。

上三角矩阵:
当i<=j时,i*(2*n-i+1)/2+j-i
当i>j时,n*(n+1)/2
下三角矩阵:
当i>=j时,i*(i+1)/2+j
当i<j时,n*(n+1)/2复制代码

1.3.3 对角矩阵

对角矩阵(diagonal matrix)是一个主对角线之外的元素皆为0的矩阵,常写为diag(a1,a2,...,an) 。对角矩阵可以认为是矩阵中最简单的一种,值得一提的是:对角线上的元素可以为 0 或其他值,对角线上元素相等的对角矩阵称为数量矩阵;对角线上元素全为1的对角矩阵称为单位矩阵。对角矩阵的运算包括和、差运算、数乘运算、同阶对角阵的乘积运算,且结果仍为对角阵。

image-20211109134944404

image-20211109135640159

公式就不推了,比较简单,高中的数学知识。差不多就是2*i+j

总结:

数组这一篇文章是比较简单的,博主没有做过多的介绍,因为不是很难,对压缩矩阵感兴趣的可以自己尝试改进,进行更深层次的研究,博主才疏学浅,只是简单的介绍了一下,哈哈哈,传作不易,点赞关注,评论哦!! 上一篇:# 数据结构专升本学习,串篇(链式串)


作者:IC00
链接:https://juejin.cn/post/7028449033614000159


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐