数据结构与C

数据结构与C 知识量:8 - 24 - 99

4.2 数组><

数组的逻辑结构- 4.2.1 -

数组是一种线性逻辑结构,可以用来存储多个相同类型的数据元素。在C语言中,数组是通过连续的内存空间来存储数据元素的,其逻辑结构与线性表类似,可以通过下标来访问数组中的元素。

在C语言中,定义一个数组需要指定其数据类型和数组大小。例如,以下代码定义了一个包含5个整数的数组a:

int a[5];

在C语言中,数组的下标从0开始,因此数组a中的元素可以通过下标0到4来访问。例如,以下代码将第2个元素赋值为10:

a[1] = 10;

以上代码将第2个元素(下标为1)赋值为10。

需要注意的是,在C语言中,数组名表示数组的首地址,因此可以通过数组名来访问数组中的元素。例如,以下代码将第3个元素打印出来:

printf("%d", a[2]);

以上代码将打印出第3个元素(下标为2)的值。

二维数组- 4.2.2 -

二维数组的逻辑结构是一个矩形网格,由行和列组成。每个元素在数组中都有一个唯一的坐标,由其所在的行号和列号确定。

在二维数组中,可以将其看作一个由多个一维数组组成的数组。每个一维数组代表一行,而每个元素则是一个数组元素。

例如,对于一个3x4的二维数组,可以将其看作一个由3个一维数组组成的数组。每个一维数组有4个元素,代表一行。

二维数组的逻辑结构可以用一个简单的公式表示:

a[i][j] = a[i * COL + j]

其中,a是二维数组的名称,i是行号,j是列号,COL是列数。这个公式将二维数组的坐标转换为线性存储结构中的索引。

在C语言中,二维数组的声明和初始化方式如下:

int array[ROW][COL];

其中,ROW是行数,COL是列数。可以使用嵌套的循环来访问二维数组中的元素:

for (int i = 0; i < ROW; i++) {  
    for (int j = 0; j < COL; j++) {  
        printf("%d ", array[i][j]);  
    }  
    printf("\n");  
}

这个循环会遍历二维数组的所有元素,并打印出来。

稀疏矩阵- 4.2.3 -

稀疏矩阵是一种特殊类型的矩阵,其中大多数元素都是零。对于稀疏矩阵,通常不存储所有的零元素,而是只存储非零元素。这样可以节省存储空间并提高处理速度。

在C语言中,可以使用多种方法来表示稀疏矩阵。以下是一种常见的方法,使用一个二维数组和一个额外的数组来存储非零元素的位置。

#include <stdio.h>  
#include <stdlib.h>  
  
#define MAX_SIZE 100 // 假设稀疏矩阵的最大大小为100x100  
  
typedef struct {  
    int row; // 非零元素的位置(行)  
    int col; // 非零元素的位置(列)  
    int value; // 非零元素的值  
} SparseMatrixElement;  
  
typedef struct {  
    SparseMatrixElement elements[MAX_SIZE]; // 存储非零元素的数组  
    int numElements; // 非零元素的数量  
} SparseMatrix;  
  
// 初始化稀疏矩阵  
void initSparseMatrix(SparseMatrix *matrix) {  
    matrix->numElements = 0;  
}  
  
// 添加非零元素到稀疏矩阵  
void addElement(SparseMatrix *matrix, int row, int col, int value) {  
    matrix->elements[matrix->numElements].row = row;  
    matrix->elements[matrix->numElements].col = col;  
    matrix->elements[matrix->numElements].value = value;  
    matrix->numElements++;  
}  
  
// 打印稀疏矩阵  
void printSparseMatrix(SparseMatrix *matrix) {  
    for (int i = 0; i < matrix->numElements; i++) {  
        printf("%d %d %d\n", matrix->elements[i].row, matrix->elements[i].col, matrix->elements[i].value);  
    }  
}  
  
int main() {  
    SparseMatrix matrix;  
    initSparseMatrix(&matrix);  
    addElement(&matrix, 1, 2, 3); // 在位置(1,2)添加元素3  
    addElement(&matrix, 3, 4, 5); // 在位置(3,4)添加元素5  
    printSparseMatrix(&matrix); // 打印稀疏矩阵中的所有非零元素及其位置和值  
    return 0;  
}

在这个示例中,定义了一个SparseMatrixElement结构体来存储非零元素的位置和值。然后,定义了一个SparseMatrix结构体,其中包含一个SparseMatrixElement数组和一个表示非零元素数量的整数。通过调用addElement函数,可以将非零元素添加到稀疏矩阵中。最后,使用printSparseMatrix函数打印稀疏矩阵中的所有非零元素及其位置和值。