你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

数组笔记。

2021/12/30 21:53:12

数组

    • 数组相关术语
    • 数组的抽象数据类型定义
    • 数组的顺序储存
    • 矩阵的压缩存储
      • 特殊矩阵的压缩存储
      • 稀疏矩阵的压缩存储

数组相关术语

**数组:**按一定格式排列起来的具有相同类型的数据元素的集合。
一维数组:若线性表中的数据元素为非结构的简单元素,则称为一维数组。
一维数组的逻辑结构:线性结构。定长的线性表。
声明格式:数据类型 变量名称[长度]
二维数组:若一维数组中的数据元素又是一维数组结构,则称为二维数组。
特点:1、结构中的元素本身可以是具有某种结构的数据
2、结构固定—定义后,维数和维界不再改变
与线性表的关系

数组是线性表的推广 一维数组可视为线性表,二维数组可视作元素是定长线性表的线性表

数组的抽象数据类型定义

在这里插入图片描述

数组的顺序储存

一维数组
在这里插入图片描述
二维数组
二维数组有两种存储方式:
1、以行序为主序(低下标优先)BASIC、COBOL、PASCAL
在这里插入图片描述

2、以列序为主序(高下标优先) FORTRAN
在这里插入图片描述

以行序为主序:
设数组开始存储位置LOC(0,0),存储每个元素需要L个存储单元,二维数组A中任一元素ai,j 的存储位置
LOC(i,j) = LOC(0,0) + (i×m+j)*L

三维数组
按页/行/列存放,页优先的顺序存储
在这里插入图片描述
若a[m1][m2] [m3] 各维元素个数为 m1, m2, m3 ,则下标为 i1, i2, i3的数组元素的存储位置:
在这里插入图片描述

n维数组
各维元素个数为 m1, m2, m3, …, mn

下标为 i1, i2, i3, …, in 的数组元素的存储位置:
在这里插入图片描述

矩阵的压缩存储

在数值分析中经常出现一些阶数很高的矩阵,同时在矩阵中有许多值相同的元素或者是零元素。有时为了节省存储空间,可以对这类矩阵进行压缩存储。
压缩存储: 为多个值相同的元只分配一个存储空间,对零元不分配空间。

特殊矩阵的压缩存储

1、对称矩阵
特点:在nn的矩阵A中,元素满足aij=aji ,1≤i,j≤n
存储方法: 只存储下(或者上)三角(包括主对角线)的数据元素。共占用n(n+1)/2个元素空间
在这里插入图片描述
2、上(下)三角矩阵
特点:上(下)三角矩阵是指矩阵的上(下)三角(不包括对角线)中的元均为常数c或零的n阶矩阵。
存储方法:重复元素c共享一个元素存储空间,共占用n(n+1)/2+1个元素空间: sa[0… n(n+1)/2]
上三角矩阵
在这里插入图片描述
下三角矩阵
在这里插入图片描述
3、对角矩阵
在n
n的方阵中,非零元素集中在主对角线及其两侧共L(奇数)条对角线的带状区域内 — L对角矩阵
在这里插入图片描述

稀疏矩阵的压缩存储

稀疏矩阵
在这里插入图片描述

1、顺序存储

  • 三元组顺序表

定义

#define  MAXSIZE  12500
 typedef struct {
     int  i, j;      
//该非零元的行下标和列下标
     ElemType  e;    
// 该非零元的值
 } Triple;  // 三元组类型

typedef union {
     Triple  data[MAXSIZE + 1]; 
      int     mu, nu, tu; 
} TSMatrix;  // 稀疏矩阵类型

在这里插入图片描述
2、链式存储

  • 十字链表

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

十字链表的结构
在这里插入图片描述
实例
在这里插入图片描述