"这篇资料主要介绍了串的相关术语和数组的概念,包括子串的定义和位置,以及数组的定义、顺序表示和实现,特别是多维数组和矩阵的压缩存储方法。"
串是计算机科学中一种基本的数据结构,它由一个字符序列组成。在本资料中,串的术语主要包括:
1. **子串**:一个串中任意多个连续的字符组成的序列被称为该串的子串。例如,如果主串是 "DATA STRUCTURE",则 "DATA" 是它的子串。值得注意的是,空串是任意串的子串,而任意串也是其自身的子串。
2. **子串的位置**:子串在主串中的位置是指主串中与子串第一个字符相同的位置。例如,对于主串 "ababcabcac" 和子串 "abc",子串 "abc" 的位置是 3,因为 "abc" 开始于主串的第三个字符。
接下来,资料转向了数组这一主题:
数组是一种线性数据结构,其中的元素具有统一的数据类型,并且通过下标进行访问。在多维数组中,最常见的是二维数组,它实际上可以视为由行向量或列向量组成的向量。例如,一个 m×n 的二维数组可以理解为由 m 个长度为 n 的行向量或 n 个长度为 m 的列向量组成。
在 C 语言中,定义二维数组可以使用嵌套的数组声明,例如 `elemtype array2[m][n]` 实际上等同于两个一维数组类型的声明。数组一旦定义,其大小和边界是固定的,主要的操作是根据下标访问或修改元素值。
在计算机内存中,数组通常采用顺序存储,即数组元素按照一定的顺序排列在内存中。存储方式有两种主要的形式:
- **行主序**:数组元素按照行优先的顺序存储,例如 `a11, a12, ..., a1n, a21, a22, ..., amn`,访问 (i, j) 位置的元素可以通过公式 `Loc(aij) = Loc(a11) + [(i-1)*n + (j-1)]*l` 计算存储位置。
- **列主序**:数组元素按照行列的顺序存储,即先存储所有列的元素,然后再转到下一列,例如 `a11, a21, ..., am1, a12, a22, ..., amn`。
对于特定类型的矩阵,如特殊矩阵和稀疏矩阵,可能会采用压缩存储的方式来节省空间。稀疏矩阵是指大部分元素为零的矩阵,通常只存储非零元素及其对应的位置,从而减少存储需求。
这篇资料涵盖了串的基本概念和数组的存储及操作,是软件技术学习的基础内容。了解这些概念有助于理解和处理字符串和数组相关的编程问题。