一、总结:
对这一部分还是很生疏,不太会做,而且Openjudge上的题目进度缓慢,不开森。。。
但是我还是会好好做题的,也得抽空复习一下,不然都忘光了。
二、笔记:
线性表——具有相同类型的数据元素的有限序列。
(多维)数组——线性表中的数据元素可以是线性表,但所有元素的类型相同。
广义表——线性表中的数据元素可以是线性表,且元素的类型可以不相同。
⑴ 存取:给定一组下标,读出对应的数组元素;
⑵ 修改:给定一组下标,存储或修改与其相对应的数组元素。
存取和修改操作本质上只对应一种操作——寻址
数组没有插入和删除操作,所以,不用预留空间,适合采用顺序存储。
按行优先存储的寻址
列优先存储的寻址
设数组开始存放位置 LOC( 0, 0 ) = a,
每个元素占用 l 个存储单元
则a[i][j]的存储地址:
LOC ( i, j ) = a + ( j *n +i ) * l
三维数组
N维数组
特殊矩阵和稀疏矩阵
特殊矩阵:矩阵中很多值相同的元素并且它们的分布有一定的规律。
稀疏矩阵:矩阵中有很多零元素。
压缩存储的基本思想是:
⑴ 为多个值相同的元素只分配一个存储空间;
⑵ 对零元素不分配存储空间。
对称矩阵的压缩存储
aij在一维数组中的序号
=
i×(i-1)/2+ j
∵一维数组下标从0开始
∴aij在一维数组中的下标
k=
i×(i-1)/2+ j-1
对于下三角中的元素aij(i≥j), 在一维数组中的下标k与i、j的关系为:
k=i×(i-1)/2+j-1 。
上三角中的元素aij(i<j),因为aij=aji,则访问和它对应的元素aji即可,即:
k=j×(j-1)/2+i -1。
稀疏矩阵的压缩存储
template
<class T>
struct
element
{
int row, col; //行号,列号
T item //非零元素值
};
存储结构定义:
`
``
const int MaxTerm=100;
template <class T>
struct SparseMatrix
{
T data[MaxTerm]; //存储非零元素
int mu, nu, tu; //行数,列数,非零元个数
};
广义表的存储结构——
头尾表示法
enum Elemtag {Atom, List};
template
struct GLNode {
Elemtag tag;
aunion
{
T data;
struct
{
GLNode *hp, *tp;
} ptr;
};
};
头尾表示法中:指针不再表示链表中节点之间的关系。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191021194318639.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNjMzMDYz,size_16,color_FFFFFF,t_70)