数组
在内存中的一块连续的存储空间,是最常用的数据结构
优点
- 支持随机访问
- 查找元素效率高:O(1)
缺点
- 增加、删除元素效率低:O(n)
常见操作
遍历
1
for(i = 0; i < n; i++){}
双指针
快慢指针
矩阵(二维数组)
形式如下:
1 | [[a₀₀, a₀₁, a₀₂, ... , a₀n] |
优缺点同上
常见操作
矩阵转置
1
2
3
4
5
6
7
8
9
10
11/*
* This function transforms the A matrix into the B matrix.
*/
void tranmat(int A[][maxSize], int B[][maxSize], int m, int n)
{
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
B[j][i] = A[i][j];
}
}
}矩阵相加
1
2
3
4
5
6
7
8
9
10
11/*
* This function adds the A matrix to the B matrix and returns the C matrix.
*/
void addmat(int C[][maxSize], int A[][maxSize], int B[][maxSize], int m, int n)
{
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
C[i][j] = A[i][j] + B[i][j];
}
}
}矩阵相乘
矩阵相乘的前提是A的行数 = B的列数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15/*
* This function multiples the A matrix by the B matrix and returns the C matrix.
* A : m*n, B : n*k
*/
void multmat(int C[][maxSize], int A[][maxSize], int B[][maxSize], int m, int n, int k)
{
for (int i = 0; i < m; i++) {
for (int j = 0; j < k; j++) {
C[i][j] = 0;
for (int h = 0; h < n; h++) {
C[i][j] += A[i][h] + B[h][j];
}
}
}
}
特殊矩阵和稀疏矩阵
- 对称矩阵
aij = aji - 三角矩阵
- 上三角阵
- 下三角阵
- 对角矩阵
主对角线及其上下两条线上存在数据,其他全为C - 稀疏矩阵
非零元素占少数,0占大多数的矩阵。
广义表
表内元素可以是原子或广义表的一种线性表的扩展元素。