Leap Day11——数据结构与算法 数组

目录

1、数组的定义

2、数组的声明

3、N维数组

4、数组的顺序存储

4.1 一维数组的顺序存储​

4.2 二维数组的顺序存储

5、特殊矩阵的压缩存储

6、对称矩阵

7、三角矩阵

8、对角矩阵

9、稀疏矩阵

9.1 三元组顺序表法压缩存储原则

9.2 十字链表法压缩存储原则


1、数组的定义

数组:按一定格式排列起来的具有相同类型的数据元素的集合。

一维数组:若线性表中的数据元素为非结构的简单元素,则称为一维数组。

一维数组的逻辑结构:线性结构。定长的线性表。

声明格式:数据类型变量名称[长度];例:int num[5]={0,1,2,3,4};

二维数组:若一维数组中的数据元素又是一维数组结构,则称为二维数组。

二维数组的逻辑结构

1)非线性结构:每一个数据元素既在一个行表中,又在一个列表中。

2)线性结构【定长的线性表】:该线性表的每个数据元素也是一个定长的线性表。

2、数组的声明

声明格式:数据类型 变量名称 [行数] [列数];

例:int num[5] [8];

在C语言中,一个二维数组类型也可以定义为一维数组类型(其分量类型为一维数组类型),即:

typedef elemtype array2[m] [n];

等价于:

typedef elemtype array1[n];

typedef array1 array2[m];

3、N维数组

三维数组:若二维数组中的元素又是一个一维数组,则称作三维数组。

n维数组:若n-1维数组中的元素又是一个一维数组结构,则称作n维数组。

结论:线性表结构是数组结构的一个特例,而数组结构又是线性表结构的扩展。

数组特点:结构固定——定义后,维数和维界不再改变。

数组的基本操作:除了结构的初始化和销毁之外,只有取元素和修改元素值的操作

4、数组的顺序存储

4.1 一维数组的顺序存储

4.2 二维数组的顺序存储

存储单元是一维结构,而数组是个多维结构,则用一组连续存储单元存放数组的数据元素就有个次序约定问题。

以行序为主序 C, PASCAL,JAVA, Basic

以列序为主序 FORTRAN

 

5、特殊矩阵的压缩存储

矩阵:一个由m×n个元素排成的m行n列的表。

矩阵的常规存储:将矩阵描述为一个二维数组。

矩阵的常规存储的特点:可以对其元素进行随机存取;矩阵运算非常简单;存储的密度为1。

不适宜常规存储的矩阵:值相同的元素很多且呈某种规律分布;零元素多。

矩阵的压缩存储:为多个相同的非零元素只分配一个存储空间;对零元素不分配空间。

1)什么是压缩存储? 若多个数据元素的值都相同,则只分配一个元素值的存储空间,且零元素不占存储空间。

2)什么样的矩阵能够压缩? 一些特殊矩阵,如:对称矩阵,对角矩阵,三角矩阵,稀疏矩阵等。

3)什么叫稀疏矩阵? 矩阵中非零元素的个数较少(一般小于5%)

6、对称矩阵

1)特点:在nxn的矩阵a中,满足如下性质:aij=aji(1 <= i,j <= n)

2)存储方法:只存储下(或者上)三角(包括主对角线)的数据元素。共占用n(n+1)/2个元素空间。

7、三角矩阵

1)特点:对角线以下(或者以上)的数据元素(不包括对角线)全部为常数c。

2)存储方法:重复元素c共享一个元素存储空间,共占用n(n+1)/2+1个元素 空间:sa[1..n(n+1)/2+1]

8、对角矩阵

1)特点

在nxn的方阵中,所有非零元素都集中在以主对角线为中心的带状区域中,区域外的值全为0,则称为对角矩阵。常见的有三对角矩阵、五对角矩阵、七对角矩阵等。

2)存储方法

9、稀疏矩阵

定义:非零元素的占比小于0.05时的矩阵

9.1 三元组顺序表法压缩存储原则

存各非零元的值、行列位置和矩阵的行列数。

三元组顺序表又称有序的双下标法

优点:非零元在表中按行序有序存储,因此便于进行依行顺序处理的矩阵运算。

缺点:不能随机存取。若按行号存取某一行中的非零元,则需从头开始进行查找。

9.2 十字链表法压缩存储原则

优点:它能够灵活地插入因运算而产生的新的非零元素,删除因运算而产生的新的零元素,实现矩阵的各种运算

在十字链表中,矩阵的每一个非零元素用一个结点表示,该结点除了(row,col,value)以外,还要有两个域:

right:用于链接同一行中的下一个非零元素;

down:用以链接同一列中的下一个非零元素。

十字链表中结点的结构示意图

十字链表法存储示意图

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

胖虎不秃头

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

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

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

打赏作者

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

抵扣说明:

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

余额充值