1.数组
1.数组的相关知识
- 数组概念
- 数组:由下标和值组成的序对集合
- 数组声明:三要素:名称、维数及维长度、元素类型
- 特点:所有元素同一类型
元素个数确定不变
所需的存储空间确定不变,没有插入和删除操作
4. 二维数组
Am*n m个行向量 组成的线性表
n个列向量
可以将每列看做一个元素,然后构成一个线性表
同时,每一列也是一个线性表
也可以将每行看作一个元素,然后构成一个线性表
同时,每一行也是一个线性表
线性表:N个元素的有限序列
这里元素可以扩展为:带有结构信息的元素
所以数组属于线性表
- 数组的顺序存储
- 二维数组
按行存储 按列存储
a00 |
a00 | |
a01 |
a10 | |
…… |
a(n-1)0 | |
a10 |
a01 | |
- 数组地址计算
二维数组按行存储
aij的存储地址等于a00的存储地址+(i*n+j)*sizeof(数据类型)
二维数组按列存储
aij的存储地址等于a00的存储地址+(j*n+i)*sizeof(数据类型)
- 注意:如果二维数组的下标从1开始
按行存储:
aij的存储地址等于
a11的存储地址+((i-1)*n+j-1)*sizeof(数据类型)
按列存储
a11的存储地址+((j-1)*m+i-1)*sizeof(数据类型)
计算某元素存储地址:
aij的地址=第一个元素的地址+(aij前面的元素个数)*每个元素占的字节
2.多维数组的实现——待实现
2.特殊矩阵
1.矩阵的压缩存储相关知识点
- 特殊矩阵和稀疏矩阵
- 特殊矩阵:
矩阵中有很多值相同的元素并且它们的分布有一定的规律
- 稀疏矩阵:
矩阵中有很多零元素
- 压缩矩阵的基本思想:
- 为多个值相同的元素只分配一个存储空间
- 对零元素不分配存储空间
- 特殊矩阵的压缩存储
如果用一维数组存储,算下标
下标=前面元素的
- 对称矩阵:aij=aji
- 只存储下三角部分的元素(包含对角线)
从第一行开始
- 三角矩阵
C为常量
- 只存储上三角(或下三角)部分元素,常数只存一个
下三角矩阵
- 上三角矩阵
- 对角矩阵
下标:|i-j|<=d 说明在带状区域
下标为(i-1)*L-d+d+j-i
- 稀疏矩阵
百分之五以下的非零元素
三元组存放 矩阵行数、列数、
每个元素的行、列、内容
2.代码实现——待实现
3.广义表
1.相关知识
- 广义表的概念
1.是线性表的一种推广。是 n个数据元素的有限序列,但它存储的数据还可以是一个广义表。
2.广义表通常记作:GL=(d1,d2,……,dn)
GL是表名,n是广义表的长度(元素个数)
表名 大写;元素 小写
3.若di是一个广义表,则称它为GL子表
4.在GL中,d1是GL的表头,其余部分组成的表称为GL的表尾
广义表是递归定义的
例如:
D=()空表,长度为0
A=(a,(b,c))表长度为2的广义表,
第一个元素是数据a, 第二个元素是一个子表(b,c)
B=(A,A,D),长度为3,前两个元素为表A,第三个元素为空表D
C=(a,C)长度为2的递归定义广义表,C相当于无穷表C=(a,(a,(a,(……))))。
head=(A)=a 表A的表头是a
tail(A)=((b,c)) 表A的表尾是((b,c))
- 广义表性质
- 元素可以是子表,子表还可以是子表,广义表是多层结构
- 广义表可以被其他广义表共享
- 具有递归性
- 广义表的存储结构
1.表节点:tag=1;表头;表尾
单元素:tag=0 data
子表: tag=1;表头;表尾
2.第二种方法,结构更简单
代码实现:
- 广义表的操作实现
- 求表头
- 复制广义表
- 求广义表长度(元素个数)
- 求广义表深度(括号的层次)
2.广义表操作实现——待实现