【数据结构】串、数组和广义表2——数组


数组

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

一维数组

  • 一维数组:若线性表中的数据元素为非结构的简单元素,则称为一维数组。
  • 逻辑结构:线性结构。定长的线性表。
  • 声明格式:数据类型 变量名称[长度];eg:int a[10];

二维数组

  • 二维数组:若一维数组中的数据元素又是一维数组结构,则称为二维数组。
  • 逻辑结构: 非线性结构:每一个数据元素既在一个行表中,又在一个列表中。
  • 线性结构:该线性表的每个数据元素也是一定长的线性表个定长的线性表。
  • 声明格式:数据类型 变量名称[行数][列数];eg:int num[5][8];

在C语言中,一个二维数组类型也可以定义为一维数组类型(其分量类型为一维数组类型),即:
typedef elemtype array2[m][n];
等价于:
typedef elemtype array1[n];
typedef array1 array2[m];

在这里插入图片描述

n维数组

  • 三维数组:若二维数组中的元素又是一个一维数组,则称作三维数组。
  • n维数组:若n-1维数组中的元素又是一 个一维数组结构,则称作n维数组。
  • 数组特点:结构固定定义后, 维数和维界不再改变。
  • 数组基本操作:除了结构的初始化和销毁之外,只有取元素和修改元素值的操作。

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

数组的抽象数据类型定义

在这里插入图片描述

数组的顺序存储

因为:
数组特点:结构固定,维数和维界不变。
数组基本操作:初始化、销毁、取元素、修改元素值。一般不做插入和删除操作。
所以:
一般都是采用顺序存储结构来表示数组。
注意:
数组可以是多维的,但存储数据元素的内存单元地址是一维的,因此,在存储数组结构之前,需要解决将多维关系映射到一维关系的问题。

一维数组

在这里插入图片描述
例:
有数组定义: int a[5];
每个元素占用4字节,假设a[0]存储在2000单元,a[3]地址是多少?
LOC(0)=a=2000
L=4
LOC(3)=2012
LOC(i)=a+i*L

二维数组

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

两种顺序存储方式:
以行序为主序(低下标优先) C、JAVA、BASIC、COBOL和PASCAL
在这里插入图片描述
② 以列序为主序(高下标优先) FORTRAN
在这里插入图片描述
在这里插入图片描述

例:
在这里插入图片描述
① 以行序为主序:
设数组开始存储位置LOC(0,0),存储每个元素需要L个存储单元数组元素a[i[j]的存储位置是:
LOC(i, j)= LOC(0,0)+(n*i+j)L
其中,(n
i+j)表示在a[i][j]前面所有元素个数

② 以列序为主序:
设数组开始存储位置LOC( 0, 0 ) ,存储每个元素需要L个存储单元数组元素a[i[j]的存储位置是:
LOC(i, j)= LOC(0,0)+(n*j+i)L
其中,(n
j+i)表示在a[i][j]前面所有元素个数

多维数组

三维数组
按页/行/列存放,页优先的顺序存储
在这里插入图片描述
在这里插入图片描述
n维数组
在这里插入图片描述

矩阵的压缩存储

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

在这里插入图片描述

  • 矩阵的常规存储:将矩阵描述为一个二维数组。
  • 矩阵的常规存储的特点: ① 可以对其元素进行随机存取; ② 矩阵运算非常简单; ③ 存储的密度为1。
  • 矩阵的压缩存储:为多个相同的非零元素只分配一个存储空间;对零元素不分配空间。

1、什么是压缩存储?
若多个数据元素的值都相同,则只分配一个元素值的存储空间,且零元素不占存储空间。
2、什么样的矩阵能够压缩?
一些特殊矩阵,如:对称矩阵,对角矩阵,三角矩阵,稀疏矩阵等。
3、什么叫稀疏矩阵?
矩阵中非零元素的个数较少(一般小于5%)

对称矩阵

对称矩阵
特点:在nxn的矩阵a中,满足如下性质:aij=aji (1≤i,j≤n)
在这里插入图片描述

存储方法:只存储下(或者上)三角(包括主对角线)的数据元素。共占用n(n+1)/2个元素空间。
1+2+3+···+n=n(n+1)/2
在这里插入图片描述

三角矩阵

三角矩阵
特点:对角线以下(或者以上)的数据元素(不包括对角线)全部为常数c。
在这里插入图片描述

存储方法:重复元素c共享一个元素存储空间,共占用n(n+ 1)/2+1个元素(+1是因为常数c需要占用一个空间)。
空间:sa[1… n(n+ 1)/2+1]

一维数组元素下标k:
在这里插入图片描述

对角矩阵

特点:在nxn的方阵中,所有非零元素都集中在以主对角线为中心的带状区域中,区域外的值全为0,则称为对角矩阵。常见的有三对角矩阵、五对角矩阵、七对角矩阵等。
在这里插入图片描述
存储方式:
在这里插入图片描述

稀疏矩阵

定义:设在mx n的矩阵中有t个非零元素。令δ= t/(mxn),当δ<0.05时称为稀疏矩阵。

压缩存储原则:存各非零元的值、行列位置和矩阵的行列数。

三元组顺序表

顺序存储结构——三元组顺序表又称“有序的双下标法”

  • 三元组顺序表的优点:非零元在表中按行序有序存储,因此便于进行依行顺序处理的矩阵运算。
  • 三元组顺序表的缺点:不能随机存取。若按行号存取某一行中的非零元,则需从头开始进行查找。

三元组的不同表示方法可决定稀疏矩阵不同的压缩存储方法

在这里插入图片描述
三元组(i,j,aij)惟一确定矩阵的一个非零元。

在这里插入图片描述

十字链表

链式存储结构——十字链表

  • 优点:它能够灵活地插入因运算而产生的新的非零元素,删除因运算而产生的新的零元素,实现矩阵的各种运算。
  • 在十字链表中,矩阵的每一 个非零元素用一个结点表示,该结点除了(row, col, value) 以外,还要有两个域:
    right:用于链接同一行中的下一个非零元素;
    down:用以链接同一列中的下一个非零元素。
  • 十字链表中结点的结构示意图:
    在这里插入图片描述

例:
在这里插入图片描述
在这里插入图片描述


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、填空题(每空1分,共20分) 1. 不包含任何字符(长度为0)的 称为空; 由一个或多个空格(仅由空格符)组成的 称为空白。 (对应严题集4.1①,简答题:简述空和空格的区别) 2. 设S=“A;/document/Mary.doc”,则strlen(s)= 20 , “/”的字符定位的位置为 3 。 4. 子的定位运算称为的模式匹配; 被匹配的主 称为目标, 子 称为模式。 5. 设目标T=”abccdcdccbaa”,模式P=“cdcc”,则第 6 次匹配成功。 6. 若n为主长,m为子长,则的古典(朴素)匹配算法最坏的情况下需要比较字符的总次数为 (n-m+1)*m 。 7. 假设有二维数组A6×8,每个元素用相邻的6个字节存储,存储器按字节编址。已知A的起始存储位置(基地址)为1000,则数组A的体积(存储量)为 288 B ;末尾元素A57的第一个字节地址为 1282 ;若按行存储时,元素A14的第一个字节地址为 (8+4)×6+1000=1192 ;若按列存储时,元素A47的第一个字节地址为 (6×7+4)×6+1000)=1276 。 8. 〖00年计算机系考研题〗设数组a[1…60, 1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为 9188 。 答:考虑0行0列,(58列×61行+32行)×2字节+基址2048=9188?? 9. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素 的 行下标 、 列下标 和 元素值 。 10.求下列广义表操作的结果: (1) GetHead【((a,b),(c,d))】=== (a, b) ; //头元素不必加括号 (2) GetHead【GetTail【((a,b),(c,d))】】=== (c,d) ; …………………………

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值